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

Mac下C语言程序无法读取同目录文件,报错“No such file or directory”

问题分析与解决

一、文件找不到的核心原因

当你运行编译后的程序时,程序的工作目录不一定是存放main.c和myfile.txt的桌面文件夹:

  • 若用终端编译,未切换到目标文件夹就运行程序,默认工作目录是终端启动时的路径(比如用户主目录);
  • 若用IDE(如Xcode),默认工作目录是项目的build文件夹,而非你放置文件的桌面目录。

解决方法

  1. 终端标准操作流程

    • 打开终端,输入 cd ~/Desktop/你的文件夹名称(替换为实际文件夹名),回车进入目标目录;
    • 编译代码:gcc main.c -o readfile;
    • 运行程序:./readfile,此时程序会在当前目录(即文件所在文件夹)查找myfile.txt。
  2. 临时测试:使用绝对路径
    把fopen的文件名替换为文件的绝对路径(适合快速验证),示例:

    file = fopen("/Users/你的用户名/Desktop/你的文件夹名/myfile.txt", "r");
    

    注意替换其中的用户名和文件夹名,缺点是移动文件后路径失效,仅临时测试用。

二、代码中的额外错误

你写的printf("%s", &str);存在问题:str本身就是字符数组的首地址,不需要加取地址符&,否则会导致类型不匹配,可能出现乱码或未定义行为。应修改为:

printf("%s", str);

修正后的完整代码

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

int main()
{
    FILE * file;
    char str [256];
    
    file = fopen("myfile.txt", "r");
    
    if (NULL == file)
    {
        perror("Error when opening file!");
        return -1;
    }
    
    if(fgets(str, 10, file) != NULL)
    {
        printf("%s", str);
    }
    
    fclose(file);
    return 0; // 补充标准正常返回值
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:50:25