Я побежал анализатор кода в визуальной студии на большой базе кода и я получил около миллиарда этой ошибки:Pass CString в fprintf
warning C6284: Object passed as parameter '3' when string is required in call to 'fprintf'
Согласно http://msdn.microsoft.com/en-us/library/ta308ywy.aspx «Этот дефект может производить неправильный вывод или аварии «. Однако мой коллега заявляет, что мы можем просто игнорировать все эти ошибки без каких-либо проблем. Поэтому один из моих вопросов - нам нужно что-то сделать, или мы можем просто оставить его как есть?
Если эти ошибки необходимо решить, что является самым лучшим подходом к его решению?
он будет работать, чтобы сделать так:
static_cast<const char*>(someCString)
Есть ли лучше или более правильный подход к этому?
следующие строки генерировать это предупреждение:
CString str;
fprintf(pFile, "text %s", str);
показать нам один из сайтов вызовов, которые дают это предупреждение, с полным декларированием переменных. –
Вы изучили метод-член 'GetBuffer (int minBufferLength)'? Он возвращает «LPSTR» с нулевым завершением, который, по моему мнению, в основном такой же, как «char *», но это не 'const'. Подробнее здесь: http://msdn.microsoft.com/en-us/library/aa314880(v=vs.60).aspx – olevegard
При поддержке MS или нет, это ужасная практика, и я бы PiP ваш коллега за продвигая его. Я еще ничего не вижу от MS, что * конкретно * говорит, что делать это все хорошо и хорошо, и на самом деле их документы специально говорят о том, чтобы передать в LPCTSTR для запуска оператора трансляции. Их реализация «поддерживает» его; для них. Стандарт языка превосходит их, хотят ли они признать это или нет. Если есть подраздел стандарта, который указывает на это как совместимый, я еще не видел его. – WhozCraig