Следующий код генерирует предупреждение C6284 при компиляции с /analyze
на MSVC 2008: объект передал как параметр '%s', когда строка требуется в вызове функционировать.
CString strTmp, str;
str = L"aaa.txt"
strTmp.Format (L"File: %s", str);
Я ищу хорошее решение для этого, которое не потребовало бы static_cast
Microsoft описывает использование 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());
Один из недостатков CString, э-э, особенности заключается в том, что он имеет неявное преобразование в LPCTSTR
, что делает предупреждение не таким значимым ИМХО. Но в любом случае, если вы посмотрите документацию Microsoft , они действительно используют приведение типов в своем собственном примере. Я действительно не вижу необходимости избегать здесь static_cast
, на самом деле я бы приветствовал его, поскольку он делает неявное преобразование более явным и, следовательно, более заметным.