memcpy CString to char*
memcpy CString to char*
我正在尝试使用 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
简单得多。
您只分配了内存来保存char
变量。要执行预期操作,需要分配足够的内存来保存完整的字符串。
CString str = _T("something");
LPTSTR buff = new TCHAR[(str.GetLength()+1) * sizeof(TCHAR)]; //allocate sufficient memory
memcpy(buff, str, str.GetLength() + 1);
你是
- 只分配一个
char
,除非CString
为空,否则这是不够的,并且 - 复制
CString
实例而不是它表示的字符串。
尝试
CString str = _T("something");
int size = str.GetLength() + 1;
char* buff = new char[size];
memcpy(buff, str.GetBuffer(), size);
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- Writing Char to Arduino EEPROM
- memcpy unsigned char to int
- 如何修复C++中的'cannot convert char to char*'错误?
- 返回"Cannot convert from 'std::ofstream {aka std::basic_ofstream<char>}' to bool"错误
- 使用strupr和strlwr时如何解决错误"invalid conversion of char to char*"?
- C++ cast char * to unsigned char
- Char to Int - C++
- Qt char* to QString
- 找不到错误"invalid conversion from char to const char*"的解决方案
- nameless char[] to std::string& reference
- atoi() - from char to int
- Unicode const char* to JString using JNI and C++
- 了解错误"error: cannot convert ‘char**’ to ‘const char*’ for argument ‘1’ to ‘double atof(const char*)’"
- const char* to LPCWSTR in Qt
- "incompatible types in assignment of 'char' to 'char'[100]"我使用的是 strcat 对吗?
- const char * to vector<unsigned char> Initalisation
- c++ const char* to char*
- 引起'Cannot convert from const char * to char *'
- char to char* issues