修改c中文件的现有内容

时间:2014-02-22 18:00:08

标签: c edit file-handling

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替换,如答案所示?

2 个答案:

答案 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);
}