You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C语言中fseek与文件模式的关联及异常问题咨询

C语言中fseek与文件模式的关联及异常问题咨询

我最近调试一段C代码时碰到了个百思不得其解的问题,关于fseek和文件打开模式的关联,搜了好一阵也没找到靠谱的解释,来这儿请教各位大佬。

先贴出我的代码:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char* argv[])
{
    FILE* fp = fopen("sample.txt", "w");
    if (fp == NULL)
        return 1;

    int error = 0;
    if ((error = fseek(fp, -5, SEEK_END)) != 0)
    {
        printf("Error fseek failed: %d\n", error);
        fclose(fp);
        return 1;
    }

    fprintf(fp, "%d", 1);
    fclose(fp);
    return 0;
}

我的sample.txt初始内容是:

adsfasdfasdfasfasfasfasdfasfasfasfas

asdfasdfasdfasdfasfadsfsadfadsfsafad

运行这段代码的时候,fseek返回了-1,而且原本有内容的sample.txt直接变成了空白文件。换成w+模式也会出现同样的问题,但用r+模式时程序就能正常工作。

我特别想弄明白:C语言里fseek的行为和文件打开模式之间到底存在怎样的关联?为什么不同模式下的结果会差这么多?

备注:内容来源于stack exchange,提问作者nascent

火山引擎 最新活动