為什麼fgets 會讀取檔案最後一行兩次?

2021-06-20 05:10:53 字數 415 閱讀 8181

我們在讀取檔案時,書中經常提到的邏輯是這樣的,但這是錯誤的!

while(!feof(fp))

feof不是判斷是否已經到檔案尾,而是判斷是否讀了檔案尾,

fgets在讀到檔案尾後,自動返回,buf中的內容並沒有改變,

而你也沒有判斷fgets是否成功, 所以多出乙個相同的行.

首先你要知道不論是否讀夠指定的字元數, fgets在遇到\n自動返回!

比如文字是這樣的: word\neof

fgets後, buffer = "word ";

此時檔案指標指向\n後的eof,

因為還沒有讀取eof, 所以feod此時還是非0,

再次fgets後,fgets遇到eof自動返回,不填充buffer,

buffer沒有改變,所以多出乙個相同的行.

php函式fgets讀取檔案

如果乙個檔案比較大,可以考慮用fgets函式 下面是個例子 檔案作用 fgets讀取檔案 start time microtime true file name a.txt handle fopen file name,r i 0 if handle end time microtime true ...

fgets讀取多行檔案 檔案操作

include include includetypedef struct data void test01 if data2.name null int main int argc,char ar 總結 前提就是指標變數 作為 結構體的成員淺拷貝 兩個結構體變數 中的 指標成員 指向 同一塊堆區空...

為什麼會找不到D層檔案?

近期兩天在重灌系統,今天好不easy把各種東西都裝齊全了,再開啟我的機房收費系統,就提演示樣例如以下錯誤 看到這個問題。我感覺非常熟,由於曾經也遇到過兩次這個問題,都是改了下d層的編譯路徑。改到了u層的bin debug目錄下。所以這次也照樣複製貼上,可是執行還是報這個錯。這讓我不得不從頭想想問題究...