2012-02-10 16 views
1

コードは以下の通りです。 LogToMyFile( "%Z)エラーが_vstprintfに上昇させ、アプリケーションをクラッシュ。助けてください"%Z"解析では、アクセスボイリングで未処理例外としてC++にエラーが発生しますか?

void LogToMyFile(LPCTSTR pFormat, ...) 
{ 
    TCHAR chMsg[2048]; 
    LPTSTR lpszStrings[1]; 
    va_list pArg; 

    va_start(pArg, pFormat); 
    _vstprintf(chMsg, pFormat, pArg); 
    va_end(pArg); 

    lpszStrings[0] = chMsg; 
} 

おかげ。

+0

あなたは[UNICODE_STRING](http://msdn.microsoft.com/en-us/library/windows/desktop/aa380518.aspx)構造体を引数として渡していますか? – alf

答えて

0

典型的には、%のZと同様に、プレースホルダの間のprintfの任意の形態におけるミスマッチ実際の引数はこの種の問題を引き起こします。私はprintfの使用をやめました。これはまさに安全ではありません。引数の型を変更するときにプレースホルダを変更するのを忘れるのはとても簡単です。 printfを使用する必要がある場合は、%Zと一致する引数が期待どおりのものであることを確認してください。 rieでは、lintがこれをチェックして、可能であればあなたのコードをlintします。

関連する問題