0

ディレクトリが存在しない場合は、「CreateDirectory」関数を使用してディレクトリを作成しています。ディレクトリが作成されたら、新しく作成されたフォルダーに「fopen」関数を使用して「myfile.log」ファイルを作成しようとしています。しかし、どういうわけか、myfile.log ファイルを作成できません。fopen 関数が機能していないようです。私を助けてください。

char *eptr;
FILE *errfile;
static char env[sizeof(NDGDBUG_FILE_EQUALS)+MAXPATHLEN];
f_GetFolderLocation(CSIDL_COMMON_APPDATA, env);
strcat(env,"\\temp");
CreateDirectory(env,NULL);
eptr = (char *)malloc(strlen(env)+1);
strcat(env,"\\myfile.log");
eptr=env;
errfile = fopen(*eptr, "a");
4

2 に答える 2

2
eptr = (char *)malloc(strlen(env)+1);
strcat(env,"\\sview.log");
eptr=env;

なぜこれ?で作成されたメモリが失われるため、メモリ リークが発生しますmalloc。に渡すだけenvですfopen

errfile = fopen(*eptr, "a");

なぜ*eptrですか?文字列の最初の文字ではなく、文字列へのポインターを渡したいとします。

そう、

eptr = (char *)malloc(strlen(env)+1);
strcat(env,"\\sview.log");
eptr=env;
errfile = fopen(*eptr, "a");

する必要があります

strcat(env,"\\sview.log");
errfile = fopen(env, "a");

ファイルへのパスを保存する場合は、文字列をeptrにコピーする必要があります。

strcat(env,"\\sview.log");
eptr = (char *)malloc(strlen(env)+1);
strcpy(eptr, env);
errfile = fopen(eprt, "a");
于 2013-09-13T22:42:58.883 に答える
1

*eptr最初の文字を返しますがfopen、文字列引数が必要です。この場合、逆参照する必要はありません。

fopen(eptr, "a");
于 2013-09-13T22:42:51.980 に答える