If you want to convert from std::wstring
to const WCHAR*
(i.e. the returned pointer gives read-only access to the string content), then calling std::wstring::c_str()
method is just fine:
std::wstring wstrProcToSearch;
std::wcin >> wstrProcToSearch; // input std::wstring
// Convert to const WCHAR* (read-only access)
const WCHAR * wpszProcToSearch = wstrProcToSearch.c_str();
Instead, if you want to modify std::wstring
's content, things are different. You can use &wstr[0]
(where wstr
is a non-empty instance of std::wstring
) to access the content of the std::wstring
(starting from the address of its first characters, and noting that characters are stored contiguously in memory), but you must pay attention to not overrun string's pre-allocated memory.
In general, if you have a std::wstring
of length L
, you can access characters from index 0
to (L-1)
.
Before C++17, overwriting the terminating '\0'
(located at index L
) was undefined behavior (in practice, it's been OK on Visual C++, at least with VC9/VS2008 and VC10/VS2010).
Starting with C++17, overwriting the terminating NUL ('\0'
) with another NUL has been made valid and is no more undefined behavior.
If the string has not the proper size (i.e. it's not big enough for your needs), then you can call std::wstring::resize()
to make room for new characters (i.e. resizing internal std::wstring
's buffer), and then use &wstr[0]
to read-write std::wstring
's content.