Lint 警告 559 的问题

发布于 2024-11-02 02:40:46 字数 346 浏览 3 评论 0原文

以下代码为 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

开始看清了 2024-11-09 02:40:46

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

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

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

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:

//lint -printf_code("s", TCHAR*)
哽咽笑 2024-11-09 02:40:46

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文