在文件"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;
}
我从文件中打印前3个字符的部分有效。之后,我想在文件中放入一个字符。
当我编译它时,我没有收到任何错误,但包含的文本没有改变。
答案 0 :(得分:5)
Documentation for fopen()标准地显示以下解释:
使用更新模式打开文件时(+作为第二个或第三个文件) 输入和输出都可以是模式参数中的字符 在关联的流上执行。但是,输出一定不能 直接跟着输入,没有干预fflush(3C) 或文件定位功能(fseek(3C),fsetpos(3C)或 倒带(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:
在
anahasapples
在
anaxasapples
似乎默认情况下fputc()尝试写入文件的末尾,因此您需要重新定位文件指针(例如,使用fseek)以使写入发生在当前文件指针的位置。
答案 1 :(得分:1)
首先设置指针
fseek(ptr_file, ftell (ptr_file), SEEK_SET);
fputc(c,ptr_file);
请参阅此链接以获取解释http://cplus.about.com/od/learningc/ss/files_8.htm