2

wsprintf次のコードは、呼び出しに対して Lint 警告 559「フォーマットと矛盾する引数番号 3 のサイズ」を生成します。誰でも理由を説明できますか?

WCHAR szFoo[] = L"test";
WCHAR szBar[MAX_PATH];
wsprintf(szBar, L"c:\\path\\%s\\path", szFoo);

面白いことに、フォーマット タイプを変更する%Sと警告は発生しなくなりますが、これはもちろん szFoo を LPWSTR ではなく LPSTR として再解釈しますが、これも間違っています。

もちろん、警告をリントコメントで取り除くこともできますが、問題があると考える理由を知りたいです。

4

2 に答える 2

2

%sあなたの問題は、ワイド文字列がフォーマットタイプに対して有効であることをlintが認識していないことです。

おそらく最も簡単な修正方法は、コードに次のインラインを追加することです。これは、ローカルで実装するか、ヘッダー ファイルに追加します。

//lint -printf_code("s", TCHAR*)
于 2011-04-19T16:25:44.190 に答える
1

WCHAR*LPWSTR ですが、なぜ間違っているのでしょうか?

Unicode が定義されていない場合でも LPWSTR として解釈される%lS を使用することをお勧めします

于 2011-04-18T14:48:37.143 に答える