Ошибка сегментации: 11 при вызове функции стемминга - PullRequest
0 голосов
/ 21 июня 2020

Моя программа останавливается при завершении первой строки текстовых файлов. Программа отлично работает без добавления функции фильтрации. Может ли кто-нибудь указать на ошибку?

Вывод:

the
project
gutenberg
ebook
of
alic
s
adventur
in
wonderland
by
lewi
carroll

Ошибка сегментации: 11

Код программы следующий:

int main(void) {

    char line[MAXLINE];
    FILE *text = fopen("test_1.txt", "r");
    while (fgets(line, sizeof(line), text)!= NULL) {
        //reading to the end
        if (strstr(line, ENDING) != NULL) break;
        //tokenise the string
        char *lower_line = strlwr(line);
        char * pch = filter(strtok(line, " ,.-?"));
        while (pch != NULL){
            printf("%s\n", pch);
            pch = filter(strtok(NULL, " ,.-?'"));
        }
    }
    fclose(text);
}

char *filter (char *word){

    int k = stem(word, 0, strlen(word)-1);
    word[k+1] = '\0';
    return word;

}


char* strlwr(char* s){

    char* tmp = s;
    for (;*tmp;++tmp) {
        *tmp = tolower((unsigned char) *tmp);
    }
    return s;

}

1 Ответ

1 голос
/ 21 июня 2020

в последнем цикле этого l oop

while (pch != NULL){
    printf("%s\n", pch);
    pch = filter(strtok(NULL, " ,.-?'"));
}

вы передаете ссылку NULL в функцию "filter" , это гарантирует, что когда вы получите ссылку NULL, она не запускается

   while (pch != NULL){
        pch = filter(pch);
        printf("%s\n", pch);
        pch = strtok(NULL, " ,.-?'");
    }
...