Mac下C语言程序无法读取同目录文件,报错“No such file or directory”
问题分析与解决
一、文件找不到的核心原因
当你运行编译后的程序时,程序的工作目录不一定是存放main.c和myfile.txt的桌面文件夹:
- 若用终端编译,未切换到目标文件夹就运行程序,默认工作目录是终端启动时的路径(比如用户主目录);
- 若用IDE(如Xcode),默认工作目录是项目的build文件夹,而非你放置文件的桌面目录。
解决方法
终端标准操作流程
- 打开终端,输入
cd ~/Desktop/你的文件夹名称(替换为实际文件夹名),回车进入目标目录; - 编译代码:
gcc main.c -o readfile; - 运行程序:
./readfile,此时程序会在当前目录(即文件所在文件夹)查找myfile.txt。
- 打开终端,输入
临时测试:使用绝对路径
把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
相关产品推荐
相关产品推荐

