我正在尝试使用 memcpy()
将 CString
复制到 char*
,但我很难做到。实际上,只复制了第一个字符。这是我的代码:
CString str = _T("something");
char* buff = new char();
memcpy(buff, str, str.GetLength() + 1);
在此之后,buff
包含的全部是字母 s
。
最佳答案
您可能正在混合使用 ASCII 和 Unicode 字符串。如果使用 Unicode 设置进行编译,则 CString
存储一个 Unicode 字符串(每个字符两个字节,在您的情况下每个第二个字节为 0,因此看起来像一个 ASCII 字符串终止符)。
如果你想要所有的 ASCII:
CStringA str = "something";
char* buff = new char[str.GetLength()+1];
memcpy(buff, (LPCSTR)str, str.GetLength() + 1);
如果你想要所有 Unicode:
CStringW str = L"something";
wchar_t* buff = new wchar_t[str.GetLength()+1];
memcpy(buff, (LPCWSTR)str, sizeof(wchar_t)*(str.GetLength() + 1));
如果您希望它在两种设置下都有效:
CString str = _T("something");
TCHAR* buff = new TCHAR[str.GetLength()+1];
memcpy(buff, (LPCTSTR)str, sizeof(TCHAR) * (str.GetLength() + 1));
如果要将 Unicode 字符串转换为 ASCII 字符串:
CString str = _T("something");
char* buff = new char[str.GetLength()+1];
memcpy(buff, (LPCSTR)CT2A(str), str.GetLength() + 1);
请同时识别从 str 到 LPCSTR
、LPCWSTR
或 LPCTSTR
的转换以及更正的缓冲区分配(需要多个字符,而不仅仅是一个).
此外,我不太确定这是否真的是您所需要的。例如,strdup
看起来比 new
+ memcpy
简单得多。
关于c++ - memcpy CString 到 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19684488/