簡體   English   中英

從文件中讀取單詞時出現分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM