c++ - memcpy CString 到 char*

标签 c++ memcpy

我正在尝试使用 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 到 LPCSTRLPCWSTRLPCTSTR 的转换以及更正的缓冲区分配(需要多个字符,而不仅仅是一个).

此外,我不太确定这是否真的是您所需要的。例如,strdup 看起来比 new + memcpy 简单得多。

关于c++ - memcpy CString 到 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19684488/

相关文章:

c - 仅打印出所需长度的指针

c - memcpy() 是否使用 realloc()?

c - 是否是 memcpy 所期望的

c++ - 免费(): invalid next size (fast): 0x0000000000f45160 ***

c++ - malloc() 和 free() 是如何工作的?

c++ - 为什么我的变量在我设置它们的类之外打印时给出不同的值?

c++ - 通过指针将结构传递给函数

c - memcpy 和 free 后的段错误

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 用字节初始化 char* 和 std::string