2016-10-18 38 views
0
#include <stdio.h> 

int main() 
{ 
    FILE * fp = fopen("Introduce.txt","rt"); 

    fseek(fp,0,SEEK_END); 
    int i = feof(fp); 
    printf("%d",i); 

    fseek(fp,1,SEEK_END); 
    i = feof(fp); 
    printf("%d",i); 

    fseek(fp,-1,SEEK_END); 
    i = feof(fp); 
    printf("%d",i); 

    return 0; 
} 

我試圖在文件末尾訪問EOF定位'文件位置指示符'。
但是這段代碼的結果是「000」。 這是爲什麼發生?爲什麼我無法使用fseek()訪問EOF?

+2

你必須從文件中讀取以獲得EOF。 –

+0

** 7.21.9.2 fseek函數p5 **清除 流的文件結束指示符,然後建立新的位置._ – BLUEPIXY

回答

3

feof()函數在您嘗試讀取某些數據並且沒有要讀取的數據之前不會報告它處於EOF狀態。

您可以尋找超出當前EOF的文件開放寫入(或開放閱讀和寫入)。

有關爲什麼你很少需要使用feof()的更多信息請參閱while (!feof(file)) is always wrong。在某些方面,feof()是一個你應該忘記的功能 - 如果你認爲它不存在,你的大部分程序都會改進。

2

This documentation on feof是很清楚的(重點煤礦):

此功能只報告所報告的最 最近的I/O操作流的狀態,它不檢查相關的數據源。例如,如果最近的I/O是fgetc,它返回文件的最後一個字節 ,則feof返回零。 下一個fgetc失敗, 將流狀態更改爲文件結束。只有那麼feof返回 非零。

在典型用法中,輸入流處理會在出現任何錯誤時停止; feofferror然後用於區分不同的錯誤 條件。

相關問題