[英]Segmentation fault when reading words from a file
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
數組的 words 函數。 雖然我從文件中獲取的字符都不是這些標點符號中的任何一個,但我將它們添加到 current_word 數組中,該數組由我傳遞給函數words
的指針指向。
我可能缺少一些關於指針的知識。
這不斷給我錯誤Segmentation fault
除其他問題外,這可能是這個問題的重復:
為什么“while (!feof (file))”總是錯誤的?
feof()
在實際命中 EOF 之前不會返回非零值。 所以你打電話給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;
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.