Czytam ze słownika i wypisuję słowo + długość słowa do celów testowych.strlen nie podając prawidłowej długości napisu C
Używam strlen, aby uzyskać długość struny. Jednak liczby, które otrzymałem, są nieprawidłowe. Wierzę, że strlen nie zalicza znaku \ 0.
Czytam pierwsze 10 słów ze słownika. My spodziewać wyjście powinno być:
W:A L:1
W:A's L:3
W:AA's L:4
W:AB's L:4
W:ABM's L:5
W:AC's L:4
W:ACTH's L:6
W:AI's L:3
W:AIDS's L:6
W:AM's L:4
Ale to co mam (Zauważ, że L:. 'S są na innej linii myślę, że to jest, gdzie jest problem):
W:A
L:2
W:A's
L:4
W:AA's
L:5
W:AB's
L:5
W:ABM's
L:6
W:AC's
L:5
W:ACTH's
L:7
W:AI's
L:5
W:AIDS's
L:7
W:AM's
L:5
Poniżej to mój kod:
FILE* dict = fopen("/usr/share/dict/words", "r"); //open the dictionary for read-only access
if(dict == NULL) {
return;
}
int i;
i = 0;
// Read each line of the file, and insert the word in hash table
char word[128];
while(i < 10 && fgets(word, sizeof(word), dict) != NULL) {
printf("W:%s L:%d\n", word, (int)strlen(word));
i++;
}
Wynik 'fgets()' często zawiera '' \ n''. Aby przyciąć, zobacz http://stackoverflow.com/a/28462221/2410359 BTW, ładnie sformułowane pytanie, choć z pewnością duplikat. – chux
"Wierzę, że' strlen' nie zalicza znaku '\ 0''. - Nie, tak nie jest i nie powinno. (Dowolne odwołanie do funkcji 'strlen', w tym' man strlen', jeśli twój system ma strony podręcznika, powiedziałoby ci to.) –