Вы хотите удалить завершающий символ новой строки fgets()
, как упомянуто в Удаление завершающего символа новой строки из ввода fgets () .
Затем я удалил неиспользуемые элементы вашегокод, например длина.
Как упоминается в примере из strtok()
reference , вы сначала берете токен, а затем снова вызываете функцию.При таком подходе вам не нужно беспокоиться о подсчете NULL
как слова (что и сделал ваш код).
Собрав все воедино, мы получим:
#include <stdio.h>
#include <string.h>
int main(void) {
char tekst[10000];
char* word;
int i=0;
printf("Type in your text: ");
fgets(tekst, 10000, stdin);
tekst[strcspn(tekst, "\n")] = 0;
word=strtok(tekst, " ,\".-");
while( word != NULL)
{
printf("%s ", word);
word=strtok(NULL, " ,\".-");
i++;
}
printf("%d", i);
return 0;
}
Вывод (Ввод: «переполнение стека»):
Введите текст: переполнение стека 2
PS: strlen()
возвратдлина строки без нулевого терминатора, не нужно самостоятельно вычитать.