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

ファイル名を as として渡してchar*で開いてみました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);

引数はどこstrにありFILE *ますか (素敵な変数名、マイクロソフト、いったい何を考えていたのですか?)。

Runレジストリを介して(おそらくサービスの下で、またはサービスとして)実行しようとすると、アクセス許可の問題または同様のことが発生する可能性があると思われますRunOnce

実際のエラーが何であるかがわかれば、ソリューションは簡単に作成できるはずです。

権限の問題である場合は、次のようなものを使用して、それが機能するかどうかを確認することで、それを見つけることができるはずですc:\\a\\directory\\i\\KNOW\\i\\can\\write\\to\\textfile.txt。次に、そのファイルを使用して、現在のディレクトリなどのログを記録することもできます。

「バックグラウンド」開始メソッドが間違ったディレクトリにあることが判明した場合は、プログラムの最初のアクションの 1 つとしてディレクトリを変更します。

于 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 に答える