如果我手动启动它,我有一个正确运行的程序。但是,如果我尝试添加注册表项以在启动期间自动启动它,我会收到此错误:
Debug assertion failed (str!=null) fprintf.c line:55
我尝试在发生任何事情之前添加Sleep(20000),但我得到了同样的错误。
以下是代码:
main()
{
FILE* filetowrite;
filetowrite = fopen("textfile.txt", "a+");
writefunction(filetowrite);
}
int writefunction(FILE* filetowrite) {
fprintf(filetowrite, "%s", "\n\n");
...
}
我还尝试将文件名作为char*
传递并在writefunction()
中打开,但我收到同样的错误。
答案 0 :(得分:8)
fopen
失败了。您应该始终检查返回值以查看它是否有效:
filetowrite = fopen("textfile.txt", "a+");
if (filetowrite == NULL) {
// log something, including errno
exit (1);
}
VC ++中fprintf.c
的第55行是:
_VALIDATE_RETURN( (str != NULL), EINVAL, -1);
其中str
是FILE *
参数(很好的变量名,微软,你在想什么?)。
我怀疑可能存在权限问题或尝试通过注册表运行它(类似于Run
或RunOnce
或作为服务)。
一旦你弄清楚实际的错误是什么,解决方案应该更容易生成。
如果这是权限问题,您应该能够通过使用c:\\a\\directory\\i\\KNOW\\i\\can\\write\\to\\textfile.txt
之类的内容找出它,看看它是否有效。然后,您还可以使用该文件记录当前目录等内容。
如果只是结果“背景”启动方法位于错误的目录中,则将目录更改为程序的第一个操作之一。
答案 1 :(得分:1)
以下应该可以解决您的问题:
使用fprintf时使用真实的完整路径
filetowrite = fopen("c:\\textfile.txt", "a+");
以管理员模式运行IDE(或以管理员模式运行EXE)