You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

打开文本文件后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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:10:36