Как предотвратить C6284 при использовании CString:: Формат?

Следующий код генерирует предупреждение C6284 при компиляции с /analyze на MSVC 2008: объект передал как параметр '%s', когда строка требуется в вызове функционировать.

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

Я ищу хорошее решение для этого, которое не потребовало бы static_cast

6
задан Billy ONeal 8 June 2011 в 02:41
поделиться

2 ответа

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());
6
ответ дан 10 December 2019 в 02:45
поделиться

Один из недостатков CString, э-э, особенности заключается в том, что он имеет неявное преобразование в LPCTSTR , что делает предупреждение не таким значимым ИМХО. Но в любом случае, если вы посмотрите документацию Microsoft , они действительно используют приведение типов в своем собственном примере. Я действительно не вижу необходимости избегать здесь static_cast , на самом деле я бы приветствовал его, поскольку он делает неявное преобразование более явным и, следовательно, более заметным.

3
ответ дан 10 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: