[英]What is this MSDN warning for fopen (or fopen_s) trying to say?
我正在嘗試完成這個奇怪的事情,即在文件中查找特定樣式的序列,檢查它是否為它正在尋找的序列; 然后,在確定之后,它回頭搜索並將某些值更改為所需值。
它已經完成了所有這些工作...我的問題是以下警告:
當指定
"r+"
,"w+"
或"a+"
訪問類型時,允許讀取和寫入(據說該文件已打開以進行“更新”)。 但是,當您從讀取切換為寫入時,輸入操作必須遇到EOF
標記。 如果沒有EOF
,則必須對文件定位功能使用中間調用。 文件定位功能是fsetpos
,fseek
和rewind
。 從寫入切換為讀取時,必須使用中間調用來fflush
或使用文件定位功能。
這個警告到底想說什么? 順便說一句,當我從讀取切換為寫入時,我正在使用fsetpos
找回存儲位置,這fsetpos
對文件定位函數的一個中間調用。
如果我沒有呢?
書寫/閱讀不是從最后一個位置指示符的位置繼續嗎?
帶有代碼示例:
...
getc( somefilepointer );
fprintf_s( somefilepointer, "%X", 28 );
...
和
...
getc( somefilepointer );
fgetpos( somefilepointer, &an_fpos_t );
fsetpos( somefilepointer, &an_fpos_t );
fprintf_s( somefilepointer, "%X", 28 );
...
這兩個不一樣嗎?
我同意警告並不完全清楚。 但是,您必須要小心,因為它可能無法達到您的期望。 從http://www.cplusplus.com/reference/cstdio/fopen/
“追加/更新:打開文件進行更新(用於輸入和輸出), 所有輸出操作都在文件末尾寫入數據 。重新定位操作(fseek,fsetpos,rewind)會影響下一個輸入操作, 但是輸出操作會移動位置回到文件末尾。如果文件不存在,則會創建該文件。”
因此,如果使用a +打開文件,則很可能會打印到文件末尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.