【发布时间】:2020-01-18 08:45:42
【问题描述】:
当我编译我的 C++ 项目时,我收到以下警告消息:
警告 C4477“wprintf_s”:格式字符串“%s”需要类型为“wchar_t *”的参数,但可变参数 1 具有类型
std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>
错误是调用时,
wstring(featureList)
下面是sn-p的代码:
CString featureList;
MyLog(L"featureList1.Replace(restoken + L\"; \", L\"= 1; \") list : %s",wstring(featureList));
如下所示,当我使用 c_str() 进行投射时,警告就解决了。
wstring(featureList).c_str()
我可以继续进行此修复吗?
【问题讨论】:
-
使用 %hs 传递一个 8 位编码的字符串。
-
@HansPassant:那是一种不幸的格式;固定。
-
@MSalters,该建议与问题的格式没有任何关系。 %hs 只是避免了跳过 wstring 转换循环,他可以直接传递 CString。
-
@HansPassant:这不是假设
CString是CStringA而不是CStringW吗?%s始终与CString一起使用。 -
如果它实际上是一个 CStringW 那么他还有一个理由不使用 wstring。
标签: c++ visual-studio c++11