int main()
{
FILE *ft;
char ch;
ft=fopen("abc.txt","r+");
if(ft==NULL)
{
printf("can not open target file\n");
exit(1);
}
while(1)
{
ch=fgetc(ft);
if(ch==EOF)
{
printf("done");
break;
}
if(ch=='i')
{
fputc('a',ft);
}
}
fclose(ft);
return 0;
}
正如我们所看到的那样,我希望以abc.txt
替换为i
来编辑a
。
该程序工作正常,但当我在外部打开abc.txt
时,它似乎是未经编辑的
可能的原因是什么?
为什么在这种情况下i
之后的字符不会被a
替换,如答案所示?
答案 0 :(得分:1)
你没有改变abc.txt
中的'i',你正在改变'i'之后的下一个字符。尝试将fseek(ft, -1, SEEK_CUR);
放在fputc('a', ft);
之前。
读完'i'字符后,ft
的文件位置指示符将是此'i'后的字符,当您按fputc()
写字符时,此字符将被写入在当前文件位置,即'i'之后的字符。有关详细信息,请参阅fseek(3)
。
答案 1 :(得分:0)
阅读'i'后,你需要“退后一步”写到正确的位置。
if(ch=='i')
{
fseek(ft, -1, SEEK_CUR);
fputc('a',ft);
}