代码之家  ›  专栏  ›  技术社区  ›  Mark Szymanski

在带有xcode的mac上,fputs在c中崩溃

  •  4
  • Mark Szymanski  · 技术社区  · 16 年前

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

    chdir("/var");
    
    FILE *scriptFile = fopen("wiki.txt", "w");
    
    fputs("tell application \"Firefox\"\n activate\n",scriptFile);
    
    fclose(scriptFile);
    

    当我在xcode中运行它时,当它到达第一个 fputs(); 呼叫

    3 回复  |  直到 16 年前
        1
  •  2
  •   sth    16 年前

    可能是打电话给 fopen() 失败,因为您没有写入权限 /var . 在这种情况下 FOpen-() 收益率 NULL 通过 无效的 fputs() 将导致访问冲突。

        2
  •  2
  •   WhirlWind    16 年前

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

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

        3
  •  2
  •   Jason Coco superfell    16 年前

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

    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 .