次の C++ コードで「セグメンテーション違反」が発生します。
#include <cstdio>
int main(int, char**) {
FILE *fp;
fp = fopen("~/work/dog.txt", "w");
fprintf(fp, "timer, timer3, timer5, timer6, timer7");
fclose(fp);
}
いくつかのこと:
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;
}