4

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

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");
    ...
}

我也尝试传递文件名 aschar*并将其打开writefunction(),但我得到了同样的错误。

4

2 回答 2

8

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

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

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

_VALIDATE_RETURN( (str != NULL), EINVAL, -1);

参数在哪里(漂亮strFILE *变量名,微软,你到底在想什么?)。

我怀疑尝试通过注册表运行它时可能存在权限问题或类似问题(可能是在RunRunOnce作为服务)。

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

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

如果它只是证明“后台”启动方法位于错误的目录中,请将目录更改为程序的第一个操作之一。

于 2012-04-07T05:22:34.833 回答
1

以下应该可以解决您的问题:

  1. 检查保存文件的目录是否具有正确的权限。
  2. 使用 fprintf 时使用真正的完整路径

     filetowrite = fopen("c:\\textfile.txt", "a+");
    
  3. 以管理员模式运行 IDE(或以管理员模式运行 EXE)

于 2019-04-02T07:00:49.393 回答