将std :: wstring转换为WCHAR*

Jon*_*ona 19 c++ string

我不知道如何将a转换 std::wstring为aWCHAR*

std::wstring wstrProcToSearch;
WCHAR * wpProcToSearch = NULL;

std::wcin >> wstrProcToSearch;  // input std::wstring
// now i need to convert the wstring to a WCHAR*
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?

Mr.*_*C64 26

如果你想转换std::wstringconst WCHAR*(即返回的指针提供对字符串内容的只读访问),那么调用std::wstring::c_str()方法就好了:

std::wstring wstrProcToSearch;
std::wcin >> wstrProcToSearch;  // input std::wstring

// Convert to const WCHAR* (read-only access)
const WCHAR * wpszProcToSearch = wstrProcToSearch.c_str();
Run Code Online (Sandbox Code Playgroud)

相反,如果你想修改 std::wstring内容,事情会有所不同.您可以使用&wstr[0](其中wstr是非空实例std::wstring)访问内容std::wstring(从其第一个字符的地址开始,并注意字符在内存中连续存储),但您必须注意不要超出字符串的前分配的内存.

在一般情况下,如果你有一个std::wstring长的L,你可以从索引访问字符串0(L-1).
覆盖终止'\0'(位于索引L)是未定义的行为(实际上,它在Visual C++上是正常的,至少对于VC9/VS2008和VC10/VS2010).

如果字符串的大小不合适(即它不足以满足您的需要),那么您可以调用std::wstring::resize()为新字符腾出空间(即调整内部std::wstring缓冲区的大小),然后使用&wstr[0]读写std::wstring内容.


Mar*_*som 16

如果字符串已经是正确的长度并且不需要更改,则可以通过获取指向第一个字符的指针来获取非const指针:

WCHAR * wpProcToSearch = &wstrProcToSearch[0];
Run Code Online (Sandbox Code Playgroud)

这保证在C++ 11中有效,并且没有C++ 03的已知实现.

如果你只需要一个const指针,你应该使用c_str:

const WCHAR * wpProcToSearch = wstrProcToSearch.c_str();
Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 8

我想你可以用

wpProcToSearch = wstrProcToSearch.c_str()

就像你使用普通的std :: string一样.