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

C语言fopen函数异常:macOS下创建文件后读取返回NULL

问题原因及解决方案

核心原因:macOS的系统权限限制

macOS 12.6中,/root目录是root用户的专属主目录,默认情况下普通用户(包括管理员账号)没有直接读写该目录的权限。

  • 你代码中执行fopen("/root/file.txt", "w")时,看似文件创建成功,但实际上由于权限不足,文件并未真正在/root目录下生成(系统可能拦截了该操作,或文件被重定向到用户沙箱的临时位置),后续自然无法以r模式打开。
  • 手动创建/root/file.txt时,你大概率是通过sudo或切换到root用户完成的,此时文件实际存在且权限正确,因此能正常读取。

验证步骤

在代码中添加错误检查,明确操作失败的具体原因:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("/root/file.txt", "w");
    if (file == NULL) {
        printf("创建文件失败: %s\n", strerror(errno));
        return 1;
    }
    fclose(file);

    file = fopen("/root/file.txt", "r");
    if(file == NULL) {
        printf("打开文件失败: %s\n", strerror(errno));
    } else {
        printf("打开成功\n");
        fclose(file);
    }
    return 0;
}

运行后会输出具体错误(如Permission denied),直接确认权限问题。

解决办法

  1. 更换文件路径:将文件放到普通用户有权限的目录,比如"/Users/你的用户名/file.txt"(替换成你的实际用户名)。
  2. 以root权限运行程序:在终端执行sudo ./你的程序可执行文件,赋予程序操作/root目录的权限。

内容的提问来源于stack exchange,提问作者DibaHadie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:40:17