4

次の C++ コードで「セグメンテーション違反」が発生します。

#include <cstdio>

int main(int, char**) {
  FILE *fp;
  fp = fopen("~/work/dog.txt", "w");
  fprintf(fp, "timer, timer3, timer5, timer6, timer7");
  fclose(fp);
}
4

3 に答える 3

1

いくつかのこと:

  • fp を使用する前に NULL をチェックする必要があります。そうしないと、ファイルが見つからないときはいつでも segfault が発生します。

  • fopen に渡す前にフル パスを解決する必要があります (fopen は "~" の処理方法を知りません)。

例:

FILE *fp = NULL;
char path[MAX];
char *home = getenv ("HOME");
if ( home ) 
{
    snprintf(path, sizeof(path), "%s/work/dog.txt", home);
    // now use path in fopen
    fp = fopen(path, "w");

    if ( fp )
    {
        fprintf(fp, "timer, timer3, timer5, timer6, timer7");
        fclose(fp);
    }
    else
    {
        std::cout << "your dog is missing" << std::endl;
    }
else
{
    std::cout << "You are homeless" << std::endl;
}
于 2013-06-12T17:02:24.773 に答える