2016-01-31 76 views
0

在撥打fgets之後,有沒有辦法將剛剛讀取的行移回原位?我知道您在使用fgetc時可以做ungetc。有沒有辦法可以爲fgets做類似的事情?使用fgets之後有沒有辦法讓回移一行?

我問這是因爲我有一個fgets在if語句中,我不想fgets被實際執行我只是想知道它是否會返回NULL或不。但我知道如果fgets在if語句內,它將被執行。這就是爲什麼我想知道如何在fgets被調用之前將其移回到文件中的位置。

+0

'fseek()'可以幫助你。 – MASh

回答

0

使用FTELL並存儲位置。隨着fseek你設置它隨時需要。

雖然可以搜索換行符或文件開頭,但保存位置更易於編寫代碼。

0

不,沒有。 POSIX標準只保證一個字節的回推。

你爲什麼要做到這一點目前尚不清楚,但如果你想檢查您是否已經到達了文件的末尾,正確的做法是用EOF(然後做測試的fgetc結果平等ungetc)。僅在流上調用feof是不夠的,因爲文件結束位僅在讀操作無法讀取任何更多字節後才設置。

int c = ungetc(fgetc(f), f); // peek one byte 
if (c == EOF) { 
    ... 
} 
相關問題