Преобразовать CString в массив символов? - PullRequest
7 голосов
/ 24 апреля 2009

Как преобразовать CString в MFC в char [] (массив символов)

Ответы [ 5 ]

9 голосов
/ 24 апреля 2009

Вы используете CString :: GetBuffer (), чтобы получить TCHAR [] - указатель на буфер. Если вы скомпилировали без определения UNICODE, этого достаточно - TCHAR такой же, как char, в противном случае вам придется выделить отдельный буфер и использовать для преобразования WideCharToMultiByte ().

4 голосов
/ 09 марта 2016

Я боролся с этим, но сейчас я использую вот что: (UNICODE friendly)

CString strCommand («Мой текст для отправки в DLL.»);

**

char strPass[256];
strcpy_s( strPass, CStringA(strCommand).GetString() );

**

// CStringA - это неширокая / символьная версия CString После этого ваш массив символов с нулевым символом в конце будет помещен в strPass.

Кроме того, если вы управляете библиотекой DLL с другой стороны, укажите свои параметры как:

const char * strParameter

вместо

char strParameter *

"скорее всего" преобразует строки CSt для вас, при этом обычно используется литье по умолчанию.

3 голосов
/ 24 апреля 2009

Вы можете использовать функцию GetBuffer , чтобы получить буфер символов из CString.

1 голос
/ 07 мая 2015

Вызов только метода GetBuffer недостаточен, вам также нужно скопировать этот буфер в массив.

Например:

CString sPath(_T("C:\temp\"));
TCHAR   tcPath[MAX_PATH]; 
_tcscpy(szDisplayName, sPath.GetBuffer(MAX_PATH));
0 голосов
/ 18 июня 2018

Как отмечено в другом месте, если вам нужно портировать CString для предупреждения C4840: непереносимый ф.

Для быстрого преобразования Unicode && Multibyte striong используется:

static_cast

образец:

    //was: Str1.Format( szBuffer, m_strName );
    Str1.Format(szBuffer, static_cast<LPCTSTR>(m_strName) );
...