以下代码为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-评论警告,但我很想知道它为什么会出现问题。
答案 0 :(得分:2)
您的问题是lint不知道宽字符串对%s
格式类型有效。
最简单的修复方法可能是在代码中添加以下内联,无论是在本地实现还是在头文件中:
//lint -printf_code("s", TCHAR*)
答案 1 :(得分:1)
WCHAR * 是 LPWSTR,为什么会出错?
我建议使用%{s,interprets as LPWSTR even if Unicode is not defined