Darshan VC Ответов: 3

Как Конвертировать Wchar_T В Lpwstr


Привет,
Мой фрагмент кода выглядит примерно так.

typedef char* PSTRING;

LPWSTR   usri1_name;
wchar_t  ws[100];

PSTRING createUserVar = NULL;

/*"createUserVar"  is assigned with some value*/
/*Converting PSTRING to wchar_t */
swprintf(ws, 100, L"%hs", createUserVar);


Теперь мне нужно присвоить значение ws usri1_name, но я не понимаю, как его преобразовать.
Пожалуйста, дайте мне знать ваше предложение по этому поводу.

различные способы сделать это также приветствуются.

код написан на языке Си

3 Ответов

Рейтинг:
26

Jochen Arndt

Нет никакой необходимости в обращении. LPWSTR является указателем на широкую строку и ws это массив широких символов. Так что вы можете просто написать:

usri1_name = ws;

Но вы должны позаботиться о памяти, на которую указывает usri1_name. Указатель станет недействительным, когда ws выходит за пределы области видимости (например, при выходе из функции или блока, где ws определяемый). Затем вы должны выделить память в куче с помощью new или malloc для usri1_name, скопируйте содержание ws войди в него и освободи память, когда она больше не нужна.


Leo Chapiro

+5 :)

Sergey Alexandrovich Kryukov

5ед.
—СА

CPallini

5.

Рейтинг:
1

Leo Chapiro

Как тип данных wchar фактически wchar_t и LPCWSTR фактически константный тип wchar_t*, вы можете сделать простой:

usri1_name = ws;


Sergey Alexandrovich Kryukov

5ед.
—СА

Leo Chapiro

Спасибо, Сергей :)

Рейтинг:
1

David A. Gray

Я думаю, что оба ответа упускают важный момент, а именно то, что вы должен убедитесь, что символ, следующий за последним символом, который вы хотите быть частью строки, должен быть NULL (0x00В противном случае вы рискуете переполнить буфер, когда ваш код ищет конец строки и запускает конец вашего массива из 100 символов.