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

在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默认把项目根目录作为程序的工作目录,文件放在根目录就能被正确找到。

修复步骤

  1. 确保文件路径正确

    • 可以在代码中添加打印当前工作目录的代码,找到程序实际读取文件的位置,把Employee Details.txt放到该目录下:
      char cwd[1024];
      if (getcwd(cwd, sizeof(cwd)) != NULL) {
          printf("当前工作目录:%s\n", cwd);
      }
      
    • 或者直接使用文件的绝对路径(比如"/Users/你的用户名/Documents/Employee Details.txt")。
  2. 强制检查文件打开状态
    每次调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:00:05