使用strtok时strcpy导致段错误

时间:2014-10-25 13:24:28

标签: strtok strcpy

我不太清楚为什么这段代码会导致段错误。我试图找出一个句子包含多少单词。任何人都可以帮我解决这个问题吗?

#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;
}

1 个答案:

答案 0 :(得分:1)

您在调用word之前未检查strcpy是否为空。

此外,您的循环条件sentence != NULL永远不会为假。 sentence未被重新分配给任何可能为null的内容。也许您应该测试word != NULL