有人能告诉我为什么文件不会改变?它适用于我使用rewind或fseek不使用的情况.
什么是使用fputs后的标准方式fgets.文件指示器位于第9位,因此fputs必须在此之后写入,但它不会执行任何操作.
在档案中:
abcd efgh ijkl mnor
Run Code Online (Sandbox Code Playgroud)
在源代码中:
char c;
char str[15];
FILE *fp = fopen("d:\\data.txt","r+");
fgets(str, 10, fp);
// fseek(fp, 9, SEEK_SET);
// rewind(fp);
printf("%d\n", ftell(fp));
// ftel shows that it's in "9".
printf("%s", str);
fputs(str, fp);
// why its not working
fclose(fp);
Run Code Online (Sandbox Code Playgroud)
Ste*_*ner 26
关于fopen/'+'C标准中的定义(例如,在此在线C标准草案中),从读取切换到写入需要对文件定位功能的中间调用(重点是我的):
7.21.5.3 fopen函数
(7)当以更新模式打开文件时('+'作为上述模式参数值列表中的第二个或第三个字符),可以在关联的流上执行输入和输出.但是,如果没有对fflush功能或文件定位功能(fseek,fsetpos或倒带)的干预调用,输出不应直接输入,并且输入不应直接跟随输出而不干预文件定位函数,除非输入操作遇到文件结尾.在某些实现中,打开(或创建)具有更新模式的文本文件可以改为打开(或创建)二进制流.
所以我建议您编写以下代码来克服您的问题:
fseek ( fp , 0, SEEK_CUR);
fputs(str, fp);
Run Code Online (Sandbox Code Playgroud)