strcpy вызывает segfault при использовании strtok

Я не слишком уверен, почему этот код вызывает segfault. Я пытаюсь выяснить, сколько слов содержит предложение. Может ли кто-нибудь помочь мне решить эту проблему?

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

person stackyyflow    schedule 25.10.2014    source источник


Ответы (1)


Вы не проверили, является ли word значением null, прежде чем вызывать для него strcpy.

Кроме того, ваше условие цикла sentence != NULL никогда не будет ложным. sentence не переназначается ничему, что может быть нулевым. Возможно, вам стоит протестировать word != NULL?

person Chris Jester-Young    schedule 25.10.2014