使用CString :: Format时如何防止C6284?

时间:2010-04-08 07:02:24

标签: visual-c++ compiler-warnings

以下代码在MSVC 2008上使用/analyze进行编译时生成警告C6284对象在调用函数时需要字符串时作为参数'%s'传递。

 CString strTmp, str;
 str = L"aaa.txt"
 strTmp.Format (L"File: %s", str);

我正在寻找一个不需要static_cast

的好解决方案

2 个答案:

答案 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的必要性,事实上我会欢迎它,因为它确实使隐式转换更加明确,因此更容易被发现。