一、原型
1. 在標頭檔案stdio.h中有如下巨集定義(gcc):
#define feof(__f) ((__f)->_flag & _ioeof)
#define _ioeof 0x0010 /* eof reached on read */
2. 原型宣告:
_crtimp int __cdecl__mingw_nothrow feof (file*);
3.file結構體定義:
typedef struct _iobuf
file;
二、分析
函式feof()的關鍵**為:return( pfile->_flag & 00010000 )。此處不關注巨集定義。
函式feof()的實現,最重要的變數是file結構體中的_flag成員。
二進位制檔案沒有所謂的檔案結束標誌,讀取時,當檔案指標指向檔案尾時(由作業系統判定),_flag的第4位會被置1,feof()返回非零值。究竟是由誰在執行這個置位操作,目前作者沒有**出來。
文字格式的檔案是否有檔案結束標誌,未曾**。
理解的feof()函式
feof 函式 功能 檢測流的檔案結束符eof.用途 用feof 去判斷檔案是否結束,若結束,返回非零,若文件未結束,則返回零 工作原理 即使是空的文件,內容裡有乙個隱藏的 eof 在檔案的最後,表示資料結束 而對於乙個文件,對於feof 函式,並非是讀到eof來判斷結束,而是在游標位置,往後看,如...
C語言中關於feof的使用問題
當你想讀取文字檔案的全部內容時,卻發現容易出現奇怪的現象或者最後一行重複讀取?細心看完這篇你就知道為什麼了。include define test file test.txt intmain fclose fp return0 輸出結果為 可以看到明明只有三個字元的檔案卻輸出了四行!第四行ascii...
關於feof機制的詳解
在擼 的時候遇到乙個問題,使用feof fp 做為檔案結束檢測,使用fscanf讀取檔案,但是往往會 讀取最後一行兩次。測試文件如下 測試 如下 include include int main fclose fp return 0 測試結果如下 從結果上來看,test 輸出了兩次,然而我只需要輸出...