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 );
...