对于fopen(或fopen_s)试图说的这个MSDN警告是什么?

时间:2014-02-06 17:31:45

标签: c fopen

我试图最终确定这个奇怪的事情,在文件中查找特定样式的序列,检查它是否是它正在寻找的序列;然后,在确定之后,它会回顾并将某些值更改为所需的值。

它已经完成了所有这些......我的问题是以下警告:

  

当指定"r+""w+""a+"访问类型时,允许读取和写入(该文件称为“更新”)。但是,当您从读取切换到写入时,输入操作必须遇到EOF标记。如果没有EOF,则必须使用对文件定位功能的干预调用。文件定位功能为fsetposfseekrewind。当您从写入切换到阅读时,您必须使用fflush或文件定位功能进行干预。

这个警告究竟试图说什么?顺便说一句,我正在对文件定位功能进行干预调用,当我从阅读切换到写入时,使用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 );
...

这两个不一样吗?

1 个答案:

答案 0 :(得分:0)

我同意警告并不完全清楚。但是,您需要小心,因为它可能无法达到预期效果。来自http://www.cplusplus.com/reference/cstdio/fopen/

“append / update:打开一个文件进行更新(包括输入和输出),在文件末尾写入数据的所有输出操作。重新定位操作(fseek,fsetpos,rewind)会影响下一个输入操作但输出操作会将位置移回文件末尾。如果文件不存在,则创建该文件。“

因此,如果使用 a + 打开文件,则可以打印到文件的末尾。