клонировать wchar_t * в c ++ - PullRequest
       2

клонировать wchar_t * в c ++

2 голосов
/ 27 декабря 2010

Я хочу клонировать путь, который содержится в переменной с именем szPath, к новому wchar_t.

alt text

szPath имеет тип wchar_t *.поэтому я попытался сделать что-то вроде:

szPathNew = *szPath;

, но это относится к тому же месту в памяти.что я должен делать?Я хочу глубоко клонировать это.

Ответы [ 3 ]

7 голосов
/ 27 декабря 2010

Сделайте это,

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 на MSDN

Однако, если ваша реализация не обязательно не требует необработанных указателей / массива, тогда вы должны предпочесть это,

#include<string>

//MOST SAFE!
std:wstring clone(szPath);
5 голосов
/ 27 декабря 2010

Не используйте необработанные строки C в C ++.Если вы хотите строки широких символов, вы можете использовать std :: wstring:

#include <string>

...

std::wstring szPathClone1 = szPath;  // Works as expected

Если вы настаиваете на прямом использовании буферов wchar_t, вы можете использовать функцию wcscpy.

PS: Вы такжекажется, что вы путаетесь с использованием указателей, сначала вы должны узнать больше об указателях.

4 голосов
/ 27 декабря 2010

Функция _wcsdup дублирует (клонирует) строку. Обратите внимание, что это выделяет новую память, поэтому вам потребуется освободить ее позже:

wchar_t * szPathClone = _wcsdup(szPath);
// ...
free(szPathClone);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...