【问题标题】:fputs crashing in C on Mac with Xcodefputs 在 Mac 上使用 Xcode 在 C 中崩溃
【发布时间】:2011-02-03 22:26:19
【问题描述】:

我有一个命令行应用程序并且有代码

chdir("/var");

FILE *scriptFile = fopen("wiki.txt", "w");

fputs("tell application \"Firefox\"\n activate\n",scriptFile);

fclose(scriptFile);

当我在 Xcode 中运行它时,当它到达第一个 fputs(); 调用时,我得到一个 EXC_BAD_ACCESS

【问题讨论】:

  • fopen(3) 失败。 scriptFile 为 NULL,您应该在尝试写入之前检查它。在 Mac OS X 中,/var 不是全局可写的。

标签: c xcode macos crash


【解决方案1】:

可能对fopen() 的调用失败,因为您在/var 中没有写入权限。在这种情况下,fopen() 返回NULL 并将NULL 传递给fputs() 将导致访问冲突。

【讨论】:

    【解决方案2】:

    您是否正在检查以确保文件已正确打开?

    通常您需要超级用户权限才能写入 /var,所以这很可能是您的问题。

    【讨论】:

      【解决方案3】:

      我已经在评论中回答了这个问题,并且有几个人告诉你你做错了什么,但我决定添加一些带有错误检查的示例代码:

      chdir("/var");
      
      FILE *scriptFile = fopen("wiki.txt", "w");
      if( !scriptFile ) {
        fprintf(stderr, "Error opening file: %s\n", strerror(errno));
        exit(-1);
      } else {
        fputs("tell application \"Firefox\"\n activate\n",scriptFile);
        fclose(scriptFile);
      }
      

      现在,如果您的文件未打开,您将看到一个错误,它会描述原因(在您的情况下,访问被拒绝)。您可以通过以下任一方式进行测试:1)用世界可写的东西替换您的文件名,例如"/tmp/wiki.txt";或 2) 以sudo ./your_command_name 的权限运行您的实用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-31
        • 2018-03-03
        • 2022-01-18
        • 2018-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多