警告C4477'wprintf_s':格式字符串'%s'需要类型为'wchar_t *'

时间:2019-09-17 13:13:25

标签: c++ visual-studio c++11

当我编译C ++项目时,收到以下警告消息:

  

警告C4477'wprintf_s':格式字符串'%s'需要类型为'wchar_t *'的参数,而可变参数1的类型为   std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>

错误是在致电时

wstring(featureList)

下面是代码段:

CString featureList;

MyLog(L"featureList1.Replace(restoken + L\"; \", L\"= 1; \") list : %s",wstring(featureList));

当我使用c_str()进行如下所示的转换时,警告得到解决。

wstring(featureList).c_str()

我可以继续进行此修复吗?

1 个答案:

答案 0 :(得分:1)

是的,这是正确的。 wstring是临时的,但其生存期仅在wsprintf_s返回后结束。

作为MSVC ++扩展,您也可以完全省略wstring并按原样传递featureList。在标准C ++中,这是“未定义行为”,但是Microsoft编写了CString,因此可以与自己的编译器一起使用。