Lint警告问题559

时间:2011-04-18 14:46:34

标签: c++ winapi lint

以下代码为wsprintf调用生成Lint警告559“参数编号3的大小与格式不一致”,有人可以解释原因吗?

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

有趣的是,如果我将格式类型更改为%S,则不再提出警告,但这当然会将szFoo重新解释为LPSTR而不是LPWSTR,这也是错误的。

当然,我可以发布Lint-评论警告,但我很想知道它为什么会出现问题。

2 个答案:

答案 0 :(得分:2)

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

最简单的修复方法可能是在代码中添加以下内联,无论是在本地实现还是在头文件中:

//lint -printf_code("s", TCHAR*)

答案 1 :(得分:1)

WCHAR * LPWSTR,为什么会出错?

我建议使用%{s,interprets as LPWSTR even if Unicode is not defined