7

如何将 MFC 中的 CString 转换为 char[](字符数组)

4

5 回答 5

9

您使用 CString::GetBuffer() 来获取 TCHAR[] - 指向缓冲区的指针。如果您在没有定义 UNICODE 的情况下编译就足够了 - TCHAR 与 char 相同,否则您必须分配一个单独的缓冲区并使用 WideCharToMultiByte() 进行转换。

于 2009-04-24T10:00:55.623 回答
4

我为此苦苦挣扎,但我现在使用的是:(UNICODE 友好)

CString strCommand("我要发送到 DLL 的文本。");

**

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

**

// CStringA 是 CString 的非宽/unicode 字符版本,然后这会将您的空终止字符数组放入 strPass 中。

此外,如果您控制另一侧的 DLL,请将您的参数指定为:

const char* strParameter

而不是

char str参数*

将“可能”为您转换 CStrings,默认强制转换通常有效。

于 2016-03-09T20:47:56.330 回答
3

您可以使用GetBuffer函数从 CString 中获取字符缓冲区。

于 2009-04-24T09:42:53.517 回答
1

仅调用 GetBuffer 方法是不够的,您还需要将此缓冲区复制到数组中。

例如:

CString sPath(_T("C:\temp\"));
TCHAR   tcPath[MAX_PATH]; 
_tcscpy(szDisplayName, sPath.GetBuffer(MAX_PATH));
于 2015-05-07T08:36:32.870 回答
0

如其他地方所述,如果您需要移植 CString 以获取警告 C4840: non-portable f.

快速的 Unicode && 多字节字符串转换使用:

static_cast

样本:

    //was: Str1.Format( szBuffer, m_strName );
    Str1.Format(szBuffer, static_cast<LPCTSTR>(m_strName) );
于 2018-06-18T12:59:00.703 回答