在撥打fgets
之後,有沒有辦法將剛剛讀取的行移回原位?我知道您在使用fgetc
時可以做ungetc
。有沒有辦法可以爲fgets
做類似的事情?使用fgets之後有沒有辦法讓回移一行?
我問這是因爲我有一個fgets
在if語句中,我不想fgets
被實際執行我只是想知道它是否會返回NULL
或不。但我知道如果fgets
在if語句內,它將被執行。這就是爲什麼我想知道如何在fgets
被調用之前將其移回到文件中的位置。
在撥打fgets
之後,有沒有辦法將剛剛讀取的行移回原位?我知道您在使用fgetc
時可以做ungetc
。有沒有辦法可以爲fgets
做類似的事情?使用fgets之後有沒有辦法讓回移一行?
我問這是因爲我有一個fgets
在if語句中,我不想fgets
被實際執行我只是想知道它是否會返回NULL
或不。但我知道如果fgets
在if語句內,它將被執行。這就是爲什麼我想知道如何在fgets
被調用之前將其移回到文件中的位置。
沒有任何功能。
您可以使用ftell
在輸入流中保存位置,並使用fseek
重新定位到該點。它對文件有用,但不能從終端讀取(即標準輸入)。
進一步閱讀
無論如何這將是一個很棒的功能名稱! – usr2564301
使用FTELL並存儲位置。隨着fseek你設置它隨時需要。
雖然可以搜索換行符或文件開頭,但保存位置更易於編寫代碼。
不,沒有。 POSIX標準只保證一個字節的回推。
你爲什麼要做到這一點目前尚不清楚,但如果你想檢查您是否已經到達了文件的末尾,正確的做法是用EOF
(然後做測試的fgetc
結果平等ungetc
)。僅在流上調用feof
是不夠的,因爲文件結束位僅在讀操作無法讀取任何更多字節後才設置。
int c = ungetc(fgetc(f), f); // peek one byte
if (c == EOF) {
...
}
'fseek()'可以幫助你。 – MASh