在文件"file1.dat"
中,我写了"anahasapples"
。然后我写了这个程序:
#include <stdio.h>
#include <conio.h>
int main()
{
FILE *ptr_file;
ptr_file=fopen("file1.dat","r+");
printf("%c",fgetc(ptr_file));
printf("%c",fgetc(ptr_file));
printf("%c\n",fgetc(ptr_file));
char c;
printf("char:\n");
c=getch();
fputc(c,ptr_file);
return 0;
}
我从文件中打印前三个字符的部分起作用。之后,我想在文件中放入一个字符。编译时,没有任何错误,但是包含的文本没有改变。
最佳答案
Documentation for fopen()通常显示以下解释:
以更新模式打开文件时(第二或第三为+
模式参数中的字符),输入和输出都可能是
在关联的流上执行。但是,输出不得
直接输入后,无需中间调用fflush(3C)
或文件定位功能(fseek(3C),fsetpos(3C)或
rewind(3C)),并且在没有
对文件定位功能的干预,除非
输入操作遇到文件结尾。
只需将fseek()添加到您的代码中,一切就可以正常工作:
#include <stdio.h>
#include <conio.h>
int main()
{
FILE *ptr_file;
ptr_file=fopen("file1.dat","r+");
printf("%c",fgetc(ptr_file));
printf("%c",fgetc(ptr_file));
printf("%c\n",fgetc(ptr_file));
char c;
printf("char:\n");
c=getch();
fseek( ptr_file, 0, SEEK_CUR ); /* Add this line */
int err = fputc(c,ptr_file);
printf ("err=%d\n", err);
return 0;
}
这是我输入“ x”前后的file1.dat:
之前
凤梨
后
菠萝蜜
似乎默认情况下fputc()尝试在文件末尾进行写操作,因此您需要重新放置文件指针(例如,使用fseek)以使写操作发生在当前文件指针的位置。
关于c - 与c中的fputc斗争,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20772918/