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
答案 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()
都会返回EOF
。 EOF
是int
值。
但您已定义char c;
而不是正确的int c;
。