我正在尝试复制CString到一个char*使用memcpy(),我很难做到这一点.实际上,只复制第一个字符.这是我的代码:
CString str = _T("something");
char* buff = new char();
memcpy(buff, str, str.GetLength() + 1);
Run Code Online (Sandbox Code Playgroud)
在此之后,所有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);
Run Code Online (Sandbox Code Playgroud)
如果你想要所有的Unicode:
CStringW str = L"something";
wchar_t* buff = new wchar_t[str.GetLength()+1];
memcpy(buff, (LPCWSTR)str, sizeof(wchar_t)*(str.GetLength() + 1));
Run Code Online (Sandbox Code Playgroud)
如果您希望它适用于这两种设置:
CString str = _T("something");
TCHAR* buff = new TCHAR[str.GetLength()+1];
memcpy(buff, (LPCTSTR)str, sizeof(TCHAR) * (str.GetLength() + 1));
Run Code Online (Sandbox Code Playgroud)
如果要将Unicode字符串转换为ASCII字符串:
CString str = _T("something");
char* buff = new char[str.GetLength()+1];
memcpy(buff, (LPCSTR)CT2A(str), str.GetLength() + 1);
Run Code Online (Sandbox Code Playgroud)
还请识别从str到LPCSTR,LPCWSTR或LPCTSTR的转换以及更正的缓冲区分配(需要多个字符而不仅仅是一个).
此外,我不太确定这是否真的是你需要的.strdup例如,A 看起来比new+ 更简单memcpy.
| 归档时间: |
|
| 查看次数: |
4753 次 |
| 最近记录: |