функция strlen дает неправильное значение - PullRequest
4 голосов
/ 10 октября 2011

Привет всем, что я написал код

char sentence[100]; 
scanf("%s" ,sentence); 
char * ptrs = sentence ;
printf("%d", strlen(ptrs));

предположим, что я ввожу

john is a boy

функция strlen() дает мне значение 4, он перестает считать после пробела, что я должен делатьспасибо

Ответы [ 3 ]

9 голосов
/ 10 октября 2011

Этот scanf будет читать только одно слово, если вы наберете printf, вы его увидите.Так что нет ничего плохого в strlen.

Используйте fgets, который читает целую строку:

if (! fgets(sentence, sizeof(sentence), stdin)) {
   fprintf(stderr, "error or end  of file while no characters have been read\n");
   return;
}
1 голос
/ 10 октября 2011

fgets () вместо scanf ().
scanf () переводит ввод в конец слова.

Советы по отладке:

Вы должны были до некоторой степени отлаживать самостоятельно. Когда strlen () не дает правильного ответа, первое, что нужно сделать, это проверить свои предположения. Вы предполагали, что предложение / ptrs имели правильное значение. Простой printf доказал бы, что это неправильно.

1 голос
/ 10 октября 2011
scanf("%s" ,sentence);

Это будет читать только строку до следующего пробела. Это означает, что оставшиеся символы, следовательно, слова после Джона не читаются.

Чтобы получить желаемый результат, используйте вместо него функцию gets ().

gets(sentence);
...