Lint警告559的问题

Problem with Lint warning 559

本文关键字:问题 警告 Lint      更新时间:2023-10-16

下面的代码产生Lint警告559 "参数的大小no. "3与格式不一致"对于wsprintf呼叫,有人能解释一下原因吗?

WCHAR szFoo[] = L"test";
WCHAR szBar[MAX_PATH];
wsprintf(szBar, L"c:\path\%s\path", szFoo);
有趣的是,如果我将格式类型更改为%S,则不再提出警告,但这当然会将szFoo重新解释为LPSTR而不是LPWSTR,这也是错误的。

当然我可以直接用lint注释把警告去掉,但是我很想知道为什么它认为有问题

您的问题是lint不知道宽字符串对%s格式类型有效。

可能最简单的修复是在代码中添加以下内联代码,可以在本地实现中添加,也可以在头文件中添加:
//lint -printf_code("s", TCHAR*)

WCHAR* LPWSTR,为什么这是错误的?

我建议使用%lS,它解释为LPWSTR,即使Unicode没有定义