fprintf调试断言失败

Kol*_*olt 4 c++ printf fopen assertions

如果我手动启动它,我有一个正确运行的程序.但是,如果我尝试添加注册表项以在启动期间自动启动它,我会收到此错误:

Debug assertion failed (str!=null) fprintf.c line:55
Run Code Online (Sandbox Code Playgroud)

在发生任何事情之前我试图添加Sleep(20000),但是我得到了同样的错误.

这是代码:

main()
{
    FILE* filetowrite;
    filetowrite = fopen("textfile.txt", "a+");

    writefunction(filetowrite);
}

int writefunction(FILE* filetowrite) {

    fprintf(filetowrite, "%s", "\n\n");
    ...
}
Run Code Online (Sandbox Code Playgroud)

我也试过传递文件名char*并打开它writefunction(),但我得到了同样的错误.

pax*_*blo 8

fopen失败.您应该始终检查返回值以查看它是否有效:

filetowrite = fopen("textfile.txt", "a+");
if (filetowrite == NULL) {
    // log something, including errno
    exit (1);
}
Run Code Online (Sandbox Code Playgroud)

fprintf.cVC++中的第55行是:

_VALIDATE_RETURN( (str != NULL), EINVAL, -1);
Run Code Online (Sandbox Code Playgroud)

这里strFILE *参数(漂亮的变量名,微软,究竟什么是你在想什么?).

我怀疑有可能是权限问题或试图通过注册表来运行它(大概是在类似的Run或者RunOnce或服务).

一旦弄清楚实际错误是什么,解决方案应该更容易生成.

如果这是一个权限问题,你应该能够通过使用类似的东西找到它c:\\a\\directory\\i\\KNOW\\i\\can\\write\\to\\textfile.txt,看看它是否有效.然后,您还可以使用该文件记录当前目录之类的内容.

如果简单地说"背景"启动方法位于错误的目录中,则将目录更改为程序的第一个操作之一.