Почему я получаю сообщение об ошибке сегментации после прочтения только одного слова?
Если я ввожу "почему это не работает"
я только вернусь
Зачем
и тогда я получаю ошибку сегментации.
Я видел другие примеры, но ни один из них не использовал пользовательский ввод, как я пытаюсь сделать здесь. Я могу прочитать только одно слово, и это не сработает. Я попытался изменить все %c на %s, но это мне не помогает. Я также понимаю, что ошибка сегментации - это указатель, указывающий куда-то не в память, но я не вижу, что с этим не так. Пожалуйста, помогите мне понять.
#include <stdio.h>
#include <string.h>
int main()
{
char word[100];
printf("Enter a sentence: ");
scanf("%s", word);
char *tok = strtok(word, " ");
printf("%s\n", tok);
while(tok != NULL)
{
tok = strtok(NULL, " ");
printf("%s\n", tok);
if(tok == NULL)
printf("finished\n");
}
return 0;
}
РЕДАКТИРОВАТЬ: я изменил scanf("%s", word); to fgets(слово, 100, стандартный ввод); и теперь он печатает все, но я получаю ошибку сегментации.
scanf("%s", word);
не сохраняет пробелы вword
, только"why"
. Используйтеfgets()
. - person chux - Reinstate Monica   schedule 19.10.2017printf("%s\n", tok);
, а затем проверяет наличиеif(tok == NULL)...
? - person chux - Reinstate Monica   schedule 19.10.2017char *tok = strtok(word, " \n"); while(tok != NULL) { printf("%s\n", tok); tok = strtok(NULL, " \n"); } printf("finished\n");
- person BLUEPIXY   schedule 19.10.2017NULL
, и отладчик позволяет быстро его найти. - person Mobius   schedule 19.10.2017