關於中feof 函式的問題

2021-07-05 02:36:31 字數 623 閱讀 3037

一、原型

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 輸出了兩次,然而我只需要輸出...