c語言 判斷檔案結束問題 feof

2022-04-03 12:10:31 字數 337 閱讀 3859

最近做開發的時候用到c語言檔案的讀寫函式fread(),採用while(!feof(fp))來控制迴圈,結果發現每次讀取資料的時候總會把最後乙個資料單元讀取兩次,很是不解。

後來查詢資料發現,原來fread()在讀到檔案最後乙個位元組時,feof(fp)還是為0值,此時while(!feof(fp))的控制條件依然為真,所以會將最後乙個資料單元再次讀取一遍。然後feof(fp)才為非0值,因此說這個方法在某些場合是不可行的。

可以採用   while(fread(p,len,1,fp))   的方式來判斷,因為fread返回的是讀取的位元組數,如果到了檔案末尾,則讀取到的位元組數為0,while判斷為假,跳出迴圈,即可把問題解決。

feof判斷檔案結束

fgets 是讀取檔案中的一行,當讀檔案過程中發生錯誤或者讀到檔案尾時,返回null,所以不能使用fgets null來判斷是否到了檔案尾,需要結合feof null 才能確定是否到了檔案尾 while feof fp fgets temp,100,fp operation temp 這種判斷是否到...

C語言 EOF和feof 判斷檔案結尾的區別

由於字元的ascii碼不可能出現 1,因此eof定義為 1 是合適的 當以文字形式讀取檔案內容,讀入的字元值等於eof時,表示讀入的已不是正常的字元而是檔案結束符 當以二進位制形式讀取檔案內容,資訊都是以數值方式存在的,eof的值可能就是所要處理的二進位制檔案中的資訊,此時需要用 feof 來判斷是...

判斷檔案結束有兩種方法 EOF和feof

判斷檔案結束有兩種方法 eof和feof 檢視stdio.h可以看到如下定義 由此可以看出,這兩種方式的原理是不同的。有人說eof只能用於文字檔案,其實不然,還要看定義的變數的型別。下面這段程式對文字檔案和二進位制檔案都可以 如果讀到了ff,由於c定義為int型,所以實際上c 0x000000ff,...