我有最奇怪的事情發生,我不太確定它爲什麼會發生。基本上我需要做的就是使用fgetc逐字節地獲取簡單ASCII文件的內容。奇怪的部分是它的工作,但後來我又添加了幾個字符,突然間它添加了一個不在那裏的新行,並且讀過文件末尾或其他東西。從字面上看,我所做的是C - 用fgetc讀取文件末尾
do {
temp = (char*) checked_realloc (temp, n+1);
e = fgetc(get_next_byte_argument);
temp[n] = e;
if (e != EOF)
n++;
}
while (e != EOF);
然後檢查我剛剛打印每個字符出來
temp_size = strlen(temp)-1;
for(debug_k = 0; debug_k < temp_size; debug_k++){
printf("%c", temp[debug_k]);
}
它除了它增加了一個額外的換行符,這不是在文件中正確輸出的一切。在此之前,我有
temp_size = strlen(temp);
但是,它結束了一些未知的字節(打印亂碼)。我試過strlen(temp)-2以防萬一,並且它爲那個特定的文件起作用,但是後來我在結尾添加了一個額外的「a」,並再次打破。
我被老實說服了。我不知道爲什麼這樣做。
編輯:checked_realloc只是realloc,但有一個快速檢查,以確保我沒有內存不足。我意識到這不是最有效的方法,但我更擔心爲什麼我似乎在額外的字節中奇蹟般地閱讀。
爲了使'strlen(temp)'工作,在文件內容之後應該有一個終止的NUL字符。你沒有顯示添加這個最終'\ 0'的代碼 - 你有嗎? –
如果checked_realloc()只是realloc,嘗試在讀取之前用0初始化內存。 –
Oooooh ... duh。我完全忘記了這一點。謝謝!順便說一下,因爲這是EOF的最後一個字符,應該NULL替換還是隻是後來?我可能會通過試驗和錯誤,但我不妨問 – user1777900