feof函式詳解
網上很多feof
講解的很模糊,百看不如一試,經過筆者在編譯器的親自測試之後總結如下:
第一種情況:
如果沒有使用fread
讀取檔案而直接使用
feof
函式得到的返回值是0;
第二種情況:
使用fread
讀取檔案,假設使用
fread(buf,1,1,filp)
乙個位元組乙個位元組的進行讀取,如果沒有讀到檔案的結尾,那麼
feof
返回值都是
0,直到讀到檔案結尾那麼返回值就是1
例如:假設要讀取的檔案名字為txt
,檔案內容是 hi
程式是:
char buf[10];
file *filp = fopen(「./txt」,」rw」); //筆者在
linux
下測試,
./txt
表示本目錄下的
txt檔案
printf(「%d\n」,feof(fip)); //列印
0 沒有呼叫
fread
必然列印0
fread(buf,1,1,filp);
printf(「%d\n」,feof(fip)); //列印
0 讀取第乙個位元組h
fread(buf,1,1,filp);
printf(「%d\n」,feof(fip)); //列印
0 讀取第二個位元組i
fread(buf,1,1,filp);
printf(「%d\n」,feof(fip)); //列印
0 讀取第三個位元組
---換行符!!
fread(buf,1,1,filp);
printf(「%d\n」,feof(fip)); //列印
1 讀取檔案結束
所以需要注意的有兩點乙個是沒有使用fread
直接用feof
會返回0
,另乙個就是換行符也算是要讀取的乙個位元組,所以如果檔案是空的,使用
fread
之後呼叫
feof
也會返回
0,因為空檔案也是先讀取換行符! 然後再次
fread
之後使用
feof就是1
了。 第三種情況:
使用fread以n
個位元組為單位進行讀取,例如以
4個位元組為一組,
fread(buf,4,1,filp),
如果在4
個位元組中包含了檔案結束符,那麼返回的就是1
例如:例如:假設要讀取的檔案名字為txt
,檔案內容是
kkk
那麼程式這樣:
char buf[10];
file *filp = fopen(「./txt」,」rw」); //筆者在
linux
下測試,
./txt
表示本目錄下的
txt檔案
printf(「%d\n」,feof(fip)); //列印
0 沒有呼叫
fread
必然列印0
fread(buf,4,1,filp);
printf(「%d\n」,feof(fip)); //列印
0 因為
kkk加上換行符正好是
4個位元組
而如果txt
的內容是 kk
fread(buf,1,1,filp);
printf(「%d\n」,feof(fip)); //列印
1 因為
4個位元組是
kk+換行符
+檔案結束符 包含了檔案結束符就會列印1
理解的feof()函式
feof 函式 功能 檢測流的檔案結束符eof.用途 用feof 去判斷檔案是否結束,若結束,返回非零,若文件未結束,則返回零 工作原理 即使是空的文件,內容裡有乙個隱藏的 eof 在檔案的最後,表示資料結束 而對於乙個文件,對於feof 函式,並非是讀到eof來判斷結束,而是在游標位置,往後看,如...
關於feof機制的詳解
在擼 的時候遇到乙個問題,使用feof fp 做為檔案結束檢測,使用fscanf讀取檔案,但是往往會 讀取最後一行兩次。測試文件如下 測試 如下 include include int main fclose fp return 0 測試結果如下 從結果上來看,test 輸出了兩次,然而我只需要輸出...
feof 函式以及EOF
函式int feof file fp 檢測到檔案結束符則返回乙個非0值,否則返回0.note 當檔案內部的位置指標指向檔案結束符時,並不會立即設定file結構中的檔案結束標識,只有再執行一次讀操作,才會設定檔案結束標誌,再呼叫feof 才會返回乙個非0值.feof.c include include...