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. 只需传递envfopen.

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 回答