這是我的程序中的一段代碼,導致最後一行出現分段錯誤。我的程序應該從文件(如果用戶指定的話)或從控制檯的手動輸入中獲取輸入。當用戶通過控制檯輸入句子時,它起作用。但是,當我從外部文件中取出句子時,會在最後一行(即到達EOF完成時的行)出現分段錯誤。 假設文件已關閉,並將內存釋放到此代碼段之外。在外部文件的最後一行出現fgets()和段錯誤問題
下面是摘錄:
if(inputExists == 1) {
char *input = malloc(256);
ip = fopen(inFile, "r");
if(ip) {
while(fgets(input, 256, ip) != NULL) {
printf("%s", input);
}
}
}
這裏是什麼是對外部文件:
bob is working.
david is a new hire.
alice is bob's boss.
charles doesn't like bob.
這是我得到的輸出時,全部程序(其中用戶的選擇從外部文件中選擇輸入)。
bob is working.
david is a new hire.
alice is bob's boss.
Segmentation fault
如果你認爲你需要更多的代碼來查找問題讓我知道,我將添加完整的程序(雖然說實話這是非常醜陋,雜亂)。
這麼少的代碼,如此多的缺陷:你忘了關閉文件。免費的記憶。 'fflush(stdout)'應該顯示最後一行。 'sizeof(input)'是錯誤的。你認爲什麼是指針的大小?你需要分配內存的大小(**減一個**)。段錯誤可能在別處。使用調試器並提供[mcve]。 – Olaf
爲什麼不一次一個字符串fscanf?甚至fgetc。我相當有信心fgetc也消耗和存儲換行符。很多簡單的方法可以避免很多簡單的錯誤。 – Chirality
'sizeof(input)'不會做你想要的。這只是變量'input'的大小,它是一個指針,所以它將是一個小的,固定的數量,比如4或8.它無法知道你從'malloc'請求了多少空間,對?所以你需要使用256的大小。 –