簡體   English   中英

Mopen警告fopen(或fopen_s)試圖說什么?

[英]What is this MSDN warning for fopen (or fopen_s) trying to say?

我正在嘗試完成這個奇怪的事情,即在文件中查找特定樣式的序列,檢查它是否為它正在尋找的序列; 然后,在確定之后,它回頭搜索並將某些值更改為所需值。

它已經完成了所有這些工作...我的問題是以下警告:

當指定"r+""w+""a+"訪問類型時,允許讀取和寫入(據說該文件已打開以進行“更新”)。 但是,當您從讀取切換為寫入時,輸入操作必須遇到EOF標記。 如果沒有EOF ,則必須對文件定位功能使用中間調用。 文件定位功能是fsetposfseekrewind 從寫入切換為讀取時,必須使用中間調用來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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM