在c ++中克隆一个wchar_t*

Tom*_*Tom 2 c++ visual-c++

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

替代文字

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

szPathNew = *szPath;
Run Code Online (Sandbox Code Playgroud)

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

Naw*_*waz 7

做这个,

wchar_t clone[260];
wcscpy(clone,szPath);
Run Code Online (Sandbox Code Playgroud)

或者,如果你想自己分配内存,

wchar_t *clone = new wchar_t[wcslen(szPath)+1];
wcscpy(clone,szPath);
//use it
delete []clone;
Run Code Online (Sandbox Code Playgroud)

在MSDN上查看:strcpy,wcscpy,_mbscpy

但是,如果你的实现不一定需要原始指针/数组,那么你应该更喜欢这个,

#include<string>

//MOST SAFE!
std:wstring clone(szPath);
Run Code Online (Sandbox Code Playgroud)

  • 请强调C++的做事方式,因为这是一个C++问题.重新执行C行为只会让我们所有人都处于黑暗时代. (2认同)

Kar*_*nek 5

不要在C++中使用原始C字符串.如果你想要宽字符串,你可以使用std :: wstring:

#include <string>

...

std::wstring szPathClone1 = szPath;  // Works as expected
Run Code Online (Sandbox Code Playgroud)

如果您坚持直接使用wchar_t缓冲区,则可以使用wcscpy函数.

PS:您似乎也对指针使用感到困惑,您应该首先了解有关指针的更多信息.