C 对于fopen(或fopen_s)的MSDN警告是什么意思?

C 对于fopen(或fopen_s)的MSDN警告是什么意思?,c,fopen,C,Fopen,我试图完成这个奇怪的事情,在文件中查找特定样式的序列,检查它是否是它所查找的序列;然后,在确定之后,它会返回并更改一些值,使之成为所需的值 它已经做了所有这些。。。我的问题在于以下警告: 如果指定了“r+”、“w+”或“a+”访问类型,则允许读取和写入(文件被称为打开以进行“更新”)。但是,当您从读取切换到写入时,输入操作必须遇到EOF标记。如果没有EOF,则必须使用对文件定位函数的中间调用。文件定位功能包括fsetpos、fseek和倒带。从写入切换到读取时,必须使用对fflush或文件定位函

我试图完成这个奇怪的事情,在文件中查找特定样式的序列,检查它是否是它所查找的序列;然后,在确定之后,它会返回并更改一些值,使之成为所需的值

它已经做了所有这些。。。我的问题在于以下警告:

如果指定了
“r+”
“w+”
“a+”
访问类型,则允许读取和写入(文件被称为打开以进行“更新”)。但是,当您从读取切换到写入时,输入操作必须遇到
EOF
标记。如果没有
EOF
,则必须使用对文件定位函数的中间调用。文件定位功能包括
fsetpos
fseek
倒带
。从写入切换到读取时,必须使用对
fflush
或文件定位函数的中间调用

这个警告到底想说什么?顺便说一句,我正在对文件定位函数进行中间调用,就在我从读取切换到写入时,使用
fsetpos
查找回我存储的位置

如果我没有呢

写入/读取不是从最后一个位置指示器的位置继续吗

通过代码示例:

...
getc( somefilepointer );
fprintf_s( somefilepointer, "%X", 28 );
...


这两个不一样吗?

我同意警告不是很清楚。但是,您确实需要小心,因为它可能不会达到您期望的效果。从

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

因此,如果文件是用a+打开的,那么您将打印到文件的末尾

...
getc( somefilepointer );
fgetpos( somefilepointer, &an_fpos_t );
fsetpos( somefilepointer, &an_fpos_t );
fprintf_s( somefilepointer, "%X", 28 );
...