I would like to convert wstring to wchar_t*. I have tried everything what i know, please help. I would like to convert wstring to wchar_t*.
Asked
Active
Viewed 1.6k times
5
-
According to the manual you can obtaine a pointer like this: [std::wstring::c_str](http://en.cppreference.com/w/cpp/string/basic_string/c_str) – Galik Jul 08 '17 at 11:04
-
Possible duplicate of [C++ Convert string (or char\*) to wstring (or wchar\_t\*)](https://stackoverflow.com/questions/2573834/c-convert-string-or-char-to-wstring-or-wchar-t) – tinamou Jul 08 '17 at 15:08
3 Answers
5
-
2The OP apparently wants a `wchar_t*`, not a `wchar_t const*`, as illustrated in this answer. Starting with C++17, [wstring::data()](https://en.cppreference.com/w/cpp/string/basic_string/data) provides that. – IInspectable Jun 24 '19 at 10:23
2
There is no way to convert wstring to wchar_t* but you can convert it to const wchar_t* which is what answer by K.Kirsz says.
This is by design because you can access a const pointer but you shouldn't manipulate the pointer. See a related question and its answers.
The best bet is to create a new string using _wcsdup and access the non const buffer, an ascii example is given there.
For unicode:
wstring str = L"I am a unicode string";
wchar_t* ptr = _wcsdup(str.c_str());
// use ptr here....
free(ptr); // free memory when done
zar
- 10,321
- 11
- 83
- 159
0
I just had this same question and arrived here. Posting my answer a few years later, but this works:
std::wstring wname1 = L"wide string";
wchar_t wname2[1024];
wcscpy(wname2, wname1.c_str());
wchar_t* pfoo = new wchar_t[1024];
wcscpy(pfoo, wname1.c_str());