我正试图使用CString将一个char*复制到一个memcpy(),但我在做它时遇到了困难。实际上,只复制了第一个字符。这是我的代码:
CString str = _T("something");
char* buff = new char();
memcpy(buff, str, str.GetLength() + 1);在此之后,buff所包含的所有内容都是字母s。
发布于 2013-10-30 14:15:19
您可能正在混合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简单得多。
发布于 2013-10-30 14:09:57
您只分配了内存来保存一个char变量。要实现您的意愿,您需要分配足够的内存来保存完整的字符串。
CString str = _T("something");
LPTSTR buff = new TCHAR[(str.GetLength()+1) * sizeof(TCHAR)]; //allocate sufficient memory
memcpy(buff, str, str.GetLength() + 1);发布于 2013-10-30 14:14:21
你才是
char,这是不够的,除非CString是空的,而且CString实例而不是它表示的字符串。试一试
CString str = _T("something");
int size = str.GetLength() + 1;
char* buff = new char[size];
memcpy(buff, str.GetBuffer(), size);https://stackoverflow.com/questions/19684488
复制相似问题