以下代码在MSVC 2008上使用/analyze
进行编译时生成警告C6284:对象在调用函数时需要字符串时作为参数'%s'传递。
CString strTmp, str;
str = L"aaa.txt"
strTmp.Format (L"File: %s", str);
我正在寻找一个不需要static_cast
答案 0 :(得分:6)
Microsoft描述了使用带有可变参数函数here的CString的用法:
CString kindOfFruit = "bananas";
int howmany = 25;
printf_s( "You have %d %s\n", howmany, (LPCTSTR)kindOfFruit );
作为替代方法,您还可以使用PCXSTR CString::GetString() const;
方法尝试修复警告:
CString strTmp, str;
str = L"aaa.txt"
strTmp.Format (L"File: %s", str.GetString());
答案 1 :(得分:3)
CString的一个设计缺陷,错误,功能是它具有隐式转换为LPCTSTR
,这使得警告没有那么有意义的恕我直言。但无论如何,如果你看一下Microsoft documentation,他们实际上在他们自己的例子中使用了强制转换。我真的没有看到在这里避免static_cast
的必要性,事实上我会欢迎它,因为它确实使隐式转换更加明确,因此更容易被发现。