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

C 从文件中读取单词时出现分段错误,c,pointers,segmentation-fault,C,Pointers,Segmentation Fault,所以我从一个文件中读取,创建我自己的数组current\u word,创建一个指向该数组的指针,以便以后编辑它。我调用具有标点符号数组的words函数。虽然我从文件中提取的字符都不是这些标点符号,但我将它们添加到当前的单词数组中,该数组由我传入函数words的指针指向 我可能缺少一些关于指针的知识 这不断给我带来错误分段错误以及其他问题,这很可能是这个问题的重复: feof()在实际命中EOF之前不会返回非零。所以你调用words(): 每次调用fgetc()都返回EOF。而EOF是一个int

所以我从一个文件中读取,创建我自己的数组
current\u word
,创建一个指向该数组的指针,以便以后编辑它。我调用具有
标点符号数组的words函数。虽然我从文件中提取的字符都不是这些标点符号,但我将它们添加到当前的单词数组中,该数组由我传入函数
words
的指针指向

我可能缺少一些关于指针的知识


这不断给我带来错误
分段错误

以及其他问题,这很可能是这个问题的重复:

feof()
在实际命中EOF之前不会返回非零。所以你调用
words()

每次调用
fgetc()
都返回
EOF
。而
EOF
是一个
int


但是你已经定义了
charc而不是正确的
intc

尝试
int c=fgetc(in)<代码>而(c!=EOF&&strchr(标点符号,c)==NULL){
。也
,;:*!?'-\n\0\r“
-->
,;:*!?'-\n\r”
仍然有相同的问题检查
fopen
的返回值并显示
file.txt
。显示
file.txt
文件或至少它的前几行。你不需要将数组大小传递给
words
,但你应该这样做,这样你就可以进行测试以确保你没有在数组边界之外写入。此外,你也不需要
检查r*cw=current\u word;
要调用
word
,只需使用
current\u word
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);
    }
}    
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';

}