首页 > 解决方案 > Fseek 回滚 8 个字节,但我希望它是 4 个字节

问题描述

for (int i = 0; i < num - 1 - ct; i++) {
    int tmp = k;
    fread(&k, sizeof(int), 1, fp);
    fflush(stdin);
    fseek(fp, -(sizeof(int)), SEEK_CUR);
    fwrite(&tmp, sizeof(int), 1, fp);
}

问题部分在上面。我想fseek每次回滚 4 个字节。但它会回滚 8 个字节,或者可能会回滚到文件的开头。我无法让它正常工作。一个新生。提前致谢。

标签: cfilefseek

解决方案


问题是当从同一个流从写入切换到读取时,您不使用fseek()同步流的内部数据。

试试这个:

fseek(fp, 0, SEEK_CUR);
for (int i = 0; i < num - 1 - ct; i++) {
    int tmp = k;
    fread(&k, sizeof(int), 1, fp);
    //fflush(stdin);  // this has undefined behavior
    fseek(fp, -(sizeof(int)), SEEK_CUR);
    fwrite(&tmp, sizeof(int), 1, fp);
    fseek(fp, 0, SEEK_CUR);
}

推荐阅读