2016-03-28 14 views
0

Ich lese eine Zeile aus einer Datei, die in der ersten Zeile das Wort "Hallo" enthält. Und dann vergleiche ich es mit „Hallo“ strcasecmp verwenden, jedoch ist es mir zu sagen, es ist immer noch andersWie man strcasecmp in c richtig verwendet

char *line = NULL; 
size_t len = 100; 
printf("%s", argv[1]); 
FILE * fp = fopen(argv[1], "r"); 
if (fp == NULL) { 
    printf("empty\n"); 
    exit(0); 
} 
getline(&line, &len, fp); 
if (strcasecmp(line, "hello") == 0) { 
    printf("same"); 
} 
+0

Es ist notwendig, das Newline zu entfernen. – BLUEPIXY

+0

Es könnte besser sein, ** strncasecmp (Zeile, "Hallo", 5) zu verwenden; ** ein Präfix ist lexikalisch vor einem längeren Wort: a zuvor wie zuvor bei. Gleiches mit hallo

+0

@ArifBurhan mit Strncasecmp tatsächlich funktioniert! Vielen Dank! – jobravooo

Antwort

1

strcasecmp nur 0 zurück, wenn die Saiten die gleichen (mit Ausnahme des Fall ist), nicht wenn die erste Zeichenfolge mit der zweiten Zeichenfolge beginnt.

Und getline liest das Newline-Zeichen am Ende der Zeile, wenn Sie also "Hallo" eingeben, wird die Zeichenfolge, die Sie in "Zeile" bekommen, "Hallo \ n" sein.

0

dies ist von der man-Seite für getline()

getline() 
reads an entire line from stream, storing the address of the 
buffer containing the text into *lineptr. 
The buffer is null-terminated 
and includes the newline character, if one was found. 

Beachten Sie, dass ein Teil der Newline-Zeichen zu erfahren, wie.

Also, entweder die Länge des Vergleichs oder besser begrenzen, schneiden Sie die neue Linie char, etwas ähnliches zu verwenden:

char * newline = NULL; 
if(NULL != (newline = strchr(line, '\n')) 
{ // then newline found 
    *newline = '\0'; 
}