Преобразовать 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) );
Другие вопросы по тегам