2016-04-16 23 views
3

Ich möchte wissen, warum strcasecmp() 0 das erste Mal zurückgibt, das ich es benutze, aber nicht das zweite.strcasecmp gibt keine Null zurück

In diesem Beispiel gebe ich speziell "Hallo Welt" in die Standardeingabe ein. Anstatt 0 0 zu drucken, druckt es 0 10. Ich habe den folgenden Code.

#include "stdio.h" 
#include "string.h" 

int main(void) { 

    char input[1000]; 
    char *a; 

    fgets(input, 1000, stdin); 

    a = strtok(input, " "); 
    printf("%d\n",strcasecmp(a,"hello")); //returns 0 

    a = strtok(NULL, " "); 
    printf("%d\n",strcasecmp(a,"world")); //returns 10 


    return 0; 
} 

Was mache ich falsch?

+3

Vielleicht 'a' eine neue Zeile Charakter haben wird. Der Debugger kann dies bestätigen –

+0

@EdHeal Ich fühle mich jetzt dumm. Vielen Dank! –

+1

Denken Sie daran, dass es in Standard C keine Funktion namens 'strcasecmp()' gibt. Ihre Kennzeichnung muss dies angeben (z. B. Linux). – Peter

Antwort

6

Die neue Zeile, die Sie nach hello world eingegeben haben, ist Teil des Tokens world, da Sie Leerzeichen als Token-Trennzeichen verwenden.

Wenn Sie strtok(input, " \n"); anstelle von strtok(input, " "); verwenden, verhält sich das Programm korrekt. Wahrscheinlich möchten Sie den Tabulator auch als Token-Trennzeichen verwenden.

wird das ganze Programm:

#include "stdio.h" 
#include "string.h" 

int main(void) { 

    char input[1000]; 
    char *a; 

    fgets(input, 1000, stdin); 

    a = strtok(input, " \n\t"); 
    if (a == NULL) return(-1); 
    printf("%d\n",strcasecmp(a,"hello")); 
    a = strtok(NULL, " \n\t"); 
    if (a == NULL) return(-1); 
    printf("%d\n",strcasecmp(a,"world")); 


    return 0; 
}