我不太清楚为什么这段代码会导致段错误。我试图找出一个句子包含多少单词。任何人都可以帮我解决这个问题吗?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX 1000
int main(void){
char sentence[MAX + 1] = {0};
char *word;
int count, len, i, num = 0;
while(fgets(sentence, MAX, stdin)){
num = 0;
word = sentence;
word = strtok(word, " ");
while(sentence != NULL){
char separate[MAX + 1] = {0};
count = 0;
word = strtok(NULL, " ");
strcpy(separate, word);
len = strlen(separate);
for(i = 0; i < len; i++)
if(isalpha(sentence[i]))
count++;
if(count == len || count == len - 1)
num++;
}
printf("%d\n", num);
}
return 0;
}
答案 0 :(得分:1)
您在调用word
之前未检查strcpy
是否为空。
此外,您的循环条件sentence != NULL
永远不会为假。 sentence
未被重新分配给任何可能为null的内容。也许您应该测试word != NULL
?