在Xcode中使用C语言读取文件元素时触发EXC_BAD_ACCESS错误求助
问题解决:EXC_BAD_ACCESS错误排查与修复
你遇到的EXC_BAD_ACCESS错误,核心原因是文件打开失败后,直接使用空指针Read_File调用fscanf,触发了非法内存访问。
问题根源
在Xcode中运行程序时,默认工作目录不是项目根目录,导致fopen("Employee Details.txt", "r")找不到目标文件,返回NULL。后续用这个空指针调用fscanf,直接引发内存访问错误。而你之前在Visual Studio中能正常运行,是因为VS默认把项目根目录作为程序的工作目录,文件放在根目录就能被正确找到。
修复步骤
确保文件路径正确
- 可以在代码中添加打印当前工作目录的代码,找到程序实际读取文件的位置,把
Employee Details.txt放到该目录下:char cwd[1024]; if (getcwd(cwd, sizeof(cwd)) != NULL) { printf("当前工作目录:%s\n", cwd); } - 或者直接使用文件的绝对路径(比如
"/Users/你的用户名/Documents/Employee Details.txt")。
- 可以在代码中添加打印当前工作目录的代码,找到程序实际读取文件的位置,把
强制检查文件打开状态
每次调用fopen后必须判断返回值,避免空指针操作,这是C语言文件操作的基本规范。
修改后的完整代码
#include <stdio.h> #include <string.h> #include <unistd.h> int main (void) { char Name[50] = "Test"; int Number = 5; FILE* Read_File; // 打印当前工作目录,辅助定位文件位置 char cwd[1024]; if (getcwd(cwd, sizeof(cwd)) != NULL) { printf("当前工作目录:%s\n", cwd); } Read_File = fopen("Employee Details.txt", "r"); // 检查文件是否成功打开 if (Read_File == NULL) { printf("文件打开失败,请检查文件路径或位置\n"); return 1; } fscanf(Read_File, "%d", &Number); printf("%d\n", Number); fclose(Read_File); // 操作完成后关闭文件 //puts(Name); return 0; }
内容的提问来源于stack exchange,提问作者TheRecon007
相关产品推荐
相关产品推荐

