2012-04-07 224 views
4

我有一个程序,如果我手动启动它可以正确运行。但是,如果我尝试添加注册表项,在启动过程中自动启动它,我得到这个错误:fprintf调试断言失败

Debug assertion failed (str!=null) fprintf.c line:55 

我想任何事情发生之前补充睡眠(20000),但我得到了同样的错误。

下面的代码:

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

    writefunction(filetowrite); 
} 

int writefunction(FILE* filetowrite) { 

    fprintf(filetowrite, "%s", "\n\n"); 
    ... 
} 

我也试过路过的文件名作为char*开放它writefunction(),但我得到了同样的错误。

+4

你是否试图检查你是否打开“textfile.txt”? – Elalfer 2012-04-07 05:09:46

+1

它可能不是从您认为它的文件夹开始。我怀疑C:\ Windows \ System32 \ textfile.txt存在:)。 (或者不管运行目录是什么。) – Corbin 2012-04-07 05:15:43

+0

与以下错误相同:fopen_s(&filetowrite,“textfile.txt”,“a +”); – Kolt 2012-04-07 05:18:52

回答

8

fopen失败。你应该总是检查,以查看返回值,如果它的工作原理:

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

fprintf.c 55号线在VC++是:

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

其中strFILE *参数(漂亮的变量名,微软,你在想什么?)。

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

一旦你找出了实际的错误,解决方案应该更容易产生。

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

如果仅仅显示“背景”起始方法位于错误的目录中,请将目录更改为程序的第一个操作之一。