我想将名为szPath的var中保存的路径克隆到新的wchar_t。
szPath的类型为wchar_t *。所以我尝试做类似的事情:
szPathNew = *szPath;
但这指的是记忆中的同一个地方。 我该怎么办?我想深深克隆它。
答案 0 :(得分:6)
这样做,
wchar_t clone[260];
wcscpy(clone,szPath);
或者,如果您想自己分配内存,
wchar_t *clone = new wchar_t[wcslen(szPath)+1];
wcscpy(clone,szPath);
//use it
delete []clone;
退房:strcpy, wcscpy, _mbscpy at MSDN
但是,如果您的实现不必然需要原始指针/数组,那么您应该更喜欢这个,
#include<string>
//MOST SAFE!
std:wstring clone(szPath);
答案 1 :(得分:5)
不要在C ++中使用原始C字符串。如果需要宽字符串,可以使用std :: wstring:
#include <string>
...
std::wstring szPathClone1 = szPath; // Works as expected
如果您坚持直接使用wchar_t缓冲区,则可以使用wcscpy函数。
PS:您似乎也对指针使用感到困惑,您应该首先了解指针。
答案 2 :(得分:4)
_wcsdup
函数复制(克隆)一个字符串。请注意,这会分配新的内存,因此您需要在以后释放它:
wchar_t * szPathClone = _wcsdup(szPath);
// ...
free(szPathClone);