从文件中读取单词时出现分段错误

时间:2015-11-24 12:03:55

标签: c pointers segmentation-fault

void words(FILE *in,char *current_word){
    char punctuation[]= ". ,;:*!?'-\n\0\r";
    char c = fgetc(in);
    int i = 0;
    while(strchr(punctuation,c) == NULL){
        current_word[i] = c;
        i++;
        c = fgetc(in);
    }
    current_word[i] = '\0';

}

int main(){


    FILE *in = fopen("file.txt","r");

    while(!feof(in)){
        char current_word[30];
        char *cw = current_word;
        words(in,cw);
        printf("%s",current_word);
    }
}    

所以我从一个文件中读取,创建我自己的数组current_word,制作一个指向该数组的指针,以便我稍后编辑它。我称之为具有punctuation标记数组的单词。虽然我从文件中获取的任何字符都不是这些标点符号中的任何一个,但我将它们添加到current_word数组中,该数组由传递给函数words的指针指向。

我可能错过了一些关于指针的知识。

这不断给我错误Segmentation fault

1 个答案:

答案 0 :(得分:1)

除其他问题外,这可能与此问题重复:

Why is “while ( !feof (file) )” always wrong?

在实际触发EOF之前,

feof()不会返回非零值。所以你打电话给words()

void words(FILE *in,char *current_word){
    char punctuation[]= ". ,;:*!?'-\n\0\r";
    char c = fgetc(in);  /* feof() returns int, not char */
    int i = 0;

    /* following loop will never stop as EOF isn't in the string */
    while(strchr(punctuation,c) == NULL){
        current_word[i] = c;
        i++;
        c = fgetc(in);
    }
    current_word[i] = '\0';

}

每次调用fgetc()都会返回EOFEOFint值。

但您已定义char c;而不是正确的int c;