2012-04-07 263 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的東西並查看它是否有效來找到該問題。然後您也可以使用該文件來記錄當前目錄等內容。

如果僅僅顯示「背景」起始方法位於錯誤的目錄中,請將目錄更改爲程序的第一個操作之一。