Преобразовать CString в массив символов?
Как преобразовать CString в MFC в char[] (массив символов)
5 ответов
Вы используете CString::GetBuffer(), чтобы получить TCHAR[] - указатель на буфер. Если вы скомпилировали без определения UNICODE, этого достаточно - TCHAR - это то же самое, что и char, в противном случае вам придется выделить отдельный буфер и использовать WideCharToMultiByte() для преобразования.
Я боролся с этим, но то, что я использую сейчас, это: (UNICODE friendly)
CString strCommand ("Мой текст для отправки в DLL.");
**
char strPass[256];
strcpy_s( strPass, CStringA(strCommand).GetString() );
**
// CStringA - это неширокая / символьная версия CString для символов Unicode. После этого ваш массив символов с нулевым символом в конце помещается в strPass.
Кроме того, если вы управляете библиотекой DLL с другой стороны, укажите свои параметры как:
const char * strParameter
скорее, чем
char strParameter *
"вероятно" конвертирует для вас строки CSt с приведением по умолчанию, как правило, эффективным.
Вы можете использовать функцию GetBuffer для получения буфера символов из CString.
Вызов только метода GetBuffer недостаточен, вам также нужно скопировать этот буфер в массив.
Например:
CString sPath(_T("C:\temp\"));
TCHAR tcPath[MAX_PATH];
_tcscpy(szDisplayName, sPath.GetBuffer(MAX_PATH));
Как отмечалось в другом месте, если вам нужно портировать CString для предупреждения C4840: непереносимый f.
Для быстрого преобразования Unicode && Multibyte striong используется:
static_cast
образец:
//was: Str1.Format( szBuffer, m_strName );
Str1.Format(szBuffer, static_cast<LPCTSTR>(m_strName) );