当我编译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()
我可以继续进行此修复吗?
答案 0 :(得分:1)
是的,这是正确的。 wstring
是临时的,但其生存期仅在wsprintf_s
返回后结束。
作为MSVC ++扩展,您也可以完全省略wstring
并按原样传递featureList
。在标准C ++中,这是“未定义行为”,但是Microsoft编写了CString
,因此可以与自己的编译器一起使用。