Lint 警告 559 的问题
以下代码为 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 评论,但我有兴趣知道为什么它认为存在问题。
The following code generates Lint warning 559 "Size of argument no. 3 inconsistent with format" for the wsprintf
call, can anyone explain why?
WCHAR szFoo[] = L"test";
WCHAR szBar[MAX_PATH];
wsprintf(szBar, L"c:\\path\\%s\\path", szFoo);
Amusingly, if I change the format type to %S
the warning is no longer raised, but this of course re-interprets szFoo as LPSTR rather than LPWSTR, which is also wrong.
Of course I can just Lint-comment the warning away but I'm interested to know why it thinks there is a problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的问题是 lint 不知道宽字符串对于
%s
格式类型有效。也许最简单的修复方法是在代码中添加以下内联代码,无论是在本地实现还是在头文件中:
Your problem is that lint doesn't know that wide strings are valid for the
%s
format type.Probably the easiest fix is to add the following inline in your code, either locally with the implementation or in a header file:
WCHAR* 是 LPWSTR,为什么会出错呢?
我建议使用 %lS,它甚至解释为 LPWSTR如果未定义 Unicode
WCHAR* is LPWSTR, why would that be wrong?
I suggest using %lS, which interprets as LPWSTR even if Unicode is not defined