打开文本文件后FILE指针为NULL的含义是什么?是否表示文件无数据?
关于fopen返回NULL的常见误解
结论先给:fopen返回NULL和文件有没有数据完全没关系
你代码里判断file == NULL,这个条件成立只说明文件打开操作失败了,根本不是文件为空。导致打开失败的常见原因有这些:
- 文件本身不存在(比如路径拼写错误、文件被删除或移动了位置)
- 当前程序没有访问该文件的权限(比如用只读模式打开,但文件设置了禁止当前用户读取的权限)
- 系统资源不够用(比如同时打开的文件数量超过了系统允许的上限)
如果文件确实存在,且你有权限打开它——哪怕这个文件是空的(里面一个字节都没有)——fopen都会返回一个有效的FILE指针,不会是NULL。这时候要判断文件有没有数据,得用其他方法,比如读取第一个字符看是不是EOF:
FILE* file = fopen(filename, "r"); if (file == NULL) { // 这里是打开失败,不是文件为空 perror("Failed to open file"); // 可以用perror打印具体失败原因 return 1; } // 判断文件是否为空 int ch = fgetc(file); if (ch == EOF) { printf("This file is empty.\n"); } else { // 要是还需要读取文件内容,把文件指针移回开头 fseek(file, 0, SEEK_SET); // 接下来正常读取文件即可 } fclose(file); // 记得用完文件要关闭
内容的提问来源于stack exchange,提问作者kristof
相关产品推荐
相关产品推荐

