Ни один из них не является правильным. Первый, похоже, работает по совпадению, в то время как последний использует инструмент, который выполняет другую цель. Единственный правильный путь, чтобы вызвать оператор приведения:
buffer.Format("%s", static_cast<LPCTSTR>(value));
пропускание CString
объекта непосредственно работает совпадения только с указателем размером значения в начале объекта интерпретируются как указатель на массив символов , Первым членом класса класса CString
является член m_pszData
- указатель, в котором хранится управляемая последовательность символов.
GetBuffer
следует использовать только в том случае, если вам необходимо напрямую манипулировать содержимым CString
. Обратите внимание, что это возвращает указатель не const
. Это часто используется при взаимодействии с API-интерфейсом C (см. Modifying CString Contents Directly).
Справа от документов 'Format': * Не удалось выполнить вызов, если сам объект строки предлагается в качестве параметра для форматирования. * – chris
Вы только хотите вызвать' GetBuffer', если вы должны обойти буфер CString управления и записи во внутренний буфер. Для каждого вызова 'GetBuffer' вам нужно вызвать' ReleaseBuffer', чтобы объект 'CString' мог восстановить свое внутреннее состояние. – IInspectable