C语言fopen打开leitura.txt返回NULL报ERROR问题如何解决?
fopen返回NULL问题修复方案
问题根因
- 相对路径匹配错误:
fopen传入相对路径leitura.txt时,会从程序运行时的当前工作目录查找文件,而非源代码存放目录,绝大多数fopen失败都是该原因导致 - 权限或文件锁定问题:运行程序的账号没有
leitura.txt的读取权限,Windows环境下可能存在文件被其他进程独占锁定的情况 - 代码存在语法缺陷:
exit函数定义在<stdlib.h>头文件中,原代码未引入该头文件,属于未定义行为,不过该问题不会直接导致fopen返回NULL
修复步骤
- 路径问题修复,二选一即可:
- 将
leitura.txt放到编译生成的可执行文件同目录下,运行程序时不要切换工作目录 - 直接传入文件绝对路径:Windows环境下写法为
fopen("C:\\用户文件夹\\xxx\\leitura.txt", "r"),Linux/macOS环境下写法为fopen("/home/xxx/leitura.txt", "r")
- 将
- 优化报错逻辑,替换原有的固定ERROR输出,用
perror打印系统级错误原因,方便快速定位问题 - 补全缺失的头文件,同时优化变量类型避免溢出:
ftell返回值为long类型,原代码用int存储存在大文件下的溢出风险
修复后完整代码
#include <stdio.h> #include <stdlib.h> int main(){ FILE * arq = NULL; char c; long x; arq = fopen("leitura.txt", "r"); if (arq == NULL){ perror("打开leitura.txt失败"); exit(EXIT_FAILURE); } while (fscanf(arq, "%c", &c) != EOF){ printf("%c", c); } x = ftell(arq); printf("NUMBER OF BYTES: %ld\n", x); fclose(arq); return 0; }
内容的提问来源于stack exchange,提问作者LPJ 141
相关产品推荐
相关产品推荐

