【问题标题】:Problem with Lint warning 559Lint 警告问题 559
【发布时间】:2011-08-07 23:01:58
【问题描述】:

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

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

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

当然,我可以直接将警告注释掉,但我很想知道它为什么认为有问题。

【问题讨论】:

    标签: c++ winapi lint


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      WCHAR* LPWSTR,为什么会出错?

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

      【讨论】:

      • 好建议,不幸的是 Lint 不知道该格式类型,所以现在我收到警告 557“无法识别的格式”;-)
      • WCHAR 是 LPWSTR - 好吧,我不明白为什么 Lint 有这个问题,但当我尝试将 WCHAR 格式化为 LPSTR 时却没有!
      • 可能是因为您没有定义 Unicode(根据链接的 MSDN 页面)
      • 我检查了 - UNICODE 和 _UNICODE 都在项目范围内定义,还有一大堆其他 TCHAR 内容无法正常工作。不过感谢您的想法!
      猜你喜欢
      • 1970-01-01
      • 2011-10-28
      • 2014-08-23
      • 2010-11-11
      • 2019-10-03
      • 2011-09-27
      • 2021-02-12
      • 2015-01-29
      • 2018-06-08
      相关资源
      最近更新 更多