【问题标题】:Fputc doesn't work in if else如果其他情况,Fputc 不起作用
【发布时间】:2012-04-27 09:01:12
【问题描述】:

我想更改文件的一个值,但下面的代码根本不起作用。当我删除 if 语句时它可以正常工作。
代码如下:

#include <stdio.h>

int main()
{
    int b;
    FILE *fp;

    fp=fopen("new", "r+");
    fseek(fp, 0x30, 0);

    b = fgetc(fp);
    if(b == 0x63)
        fputc(0x64, fp);

    fclose(fp);
    return 0;
}

文件“新”: c111111111c111111111111111111111111111111111111c1111111111111111111

还有一些我不知道的细节吗?

【问题讨论】:

    标签: c++ c file file-io


    【解决方案1】:

    如果是0x63,你已经写了一个过去b,因为fgetc 推进了文件流:

    b = fgetc(fp);
    if(b == 0x63) {
        fseek(fp, -1, SEEK_CUR);
        fputc(0x64, fp);
    }
    

    【讨论】:

    • 你很好,它有效。但是为什么我不回溯时[b]旁边的字符没有改变?应该改了吧?
    【解决方案2】:

    我认为您的问题之一是 fp = fopen("new", "r+"); “r+”是读取和追加。如果您试图覆盖数据,那么这将不起作用。此外,fgetc 会如前所述推进文件流。

    【讨论】:

    • 其实“r+”可以覆盖数据,其他像“w”或“w+”会清除当前文件。
    • 这很有趣,当我尝试时它对我不起作用。我特别试图覆盖我在文件中的数据。它只会让我追加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2015-03-22
    相关资源
    最近更新 更多