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




