在c ++中克隆一个wchar_t *

时间:2010-12-27 18:24:55

标签: c++ visual-c++

我想将名为szPath的var中保存的路径克隆到新的wchar_t。

alt text

szPath的类型为wchar_t *。所以我尝试做类似的事情:

szPathNew = *szPath;

但这指的是记忆中的同一个地方。 我该怎么办?我想深深克隆它。

3 个答案:

答案 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);