首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memcpy CString to char*

memcpy CString to char*
EN

Stack Overflow用户
提问于 2013-10-30 14:06:04
回答 3查看 6.5K关注 0票数 1

我正试图使用CString将一个char*复制到一个memcpy(),但我在做它时遇到了困难。实际上,只复制了第一个字符。这是我的代码:

代码语言:javascript
复制
CString str = _T("something");
char* buff  = new char();

memcpy(buff, str, str.GetLength() + 1);

在此之后,buff所包含的所有内容都是字母s

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-30 14:15:19

您可能正在混合ASCII和Unicode字符串。如果使用Unicode设置进行编译,则CString存储一个Unicode字符串(每个字符两个字节,在您的示例中,每个字节为0,因此看起来像一个ASCII字符串终止符)。

如果你想要所有的ASCII:

代码语言:javascript
复制
CStringA str = "something";
char* buff = new char[str.GetLength()+1];
memcpy(buff, (LPCSTR)str, str.GetLength() + 1);

如果您想要所有Unicode:

代码语言:javascript
复制
CStringW str = L"something";
wchar_t* buff = new wchar_t[str.GetLength()+1];
memcpy(buff, (LPCWSTR)str, sizeof(wchar_t)*(str.GetLength() + 1));

如果您想让它在这两种设置中工作:

代码语言:javascript
复制
CString str = _T("something");
TCHAR* buff = new TCHAR[str.GetLength()+1];
memcpy(buff, (LPCTSTR)str, sizeof(TCHAR) * (str.GetLength() + 1));

如果要将Unicode字符串转换为ASCII字符串,请执行以下操作:

代码语言:javascript
复制
CString str = _T("something");
char* buff = new char[str.GetLength()+1];
memcpy(buff, (LPCSTR)CT2A(str), str.GetLength() + 1);

还请识别从str到LPCSTRLPCWSTRLPCTSTR的转换以及正确的缓冲区分配(需要多个字符,而不仅仅是一个字符)。

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

票数 6
EN

Stack Overflow用户

发布于 2013-10-30 14:09:57

您只分配了内存来保存一个char变量。要实现您的意愿,您需要分配足够的内存来保存完整的字符串。

代码语言:javascript
复制
CString str = _T("something");
LPTSTR buff = new TCHAR[(str.GetLength()+1) * sizeof(TCHAR)]; //allocate sufficient memory
memcpy(buff, str, str.GetLength() + 1);
票数 3
EN

Stack Overflow用户

发布于 2013-10-30 14:14:21

你才是

  1. 只分配一个char,这是不够的,除非CString是空的,而且
  2. 复制CString实例而不是它表示的字符串。

试一试

代码语言:javascript
复制
CString str = _T("something");
int size = str.GetLength() + 1;
char* buff = new char[size];
memcpy(buff, str.GetBuffer(), size);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19684488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档