我不知道如何将 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*
有谁知道如何做到这一点?
如果你想从 to 转换std::wstring
(const 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();
相反,如果你想修改 std::wstring
's 的内容,情况就不同了。您可以使用&wstr[0]
(where wstr
is an non-empty instance of std::wstring
) 来访问std::wstring
(从其第一个字符的地址开始,并注意字符连续存储在内存中) 的内容,但必须注意不要超出字符串的 pre -分配的内存。
一般来说,如果你有一个std::wstring
长度L
,你可以访问从索引0
到的字符(L-1)
。
在C++17 之前,覆盖终止符'\0'
(位于 index 处L
)是未定义的行为(实际上,在 Visual C++ 上是可以的,至少在 VC9/VS2008 和 VC10/VS2010 中是这样)。
从 C++17 开始,'\0'
用另一个 NUL 覆盖终止的 NUL ( ) 已变为有效并且不再是未定义的行为。
如果字符串的大小不合适(即它不足以满足您的需要),那么您可以调用std::wstring::resize()
为新字符腾出空间(即调整 internalstd::wstring
的缓冲区大小),然后用于&wstr[0]
读写std::wstring
的内容。
如果字符串已经是适当的长度并且不需要更改,则可以通过获取指向第一个字符的指针来获取非常量指针:
WCHAR * wpProcToSearch = &wstrProcToSearch[0];
这保证可以在 C++11 中工作,并且没有已知的 C++03 实现。
如果您只需要一个 const 指针,您应该使用c_str
:
const WCHAR * wpProcToSearch = wstrProcToSearch.c_str();
我认为你可以使用
wpProcToSearch = wstrProcToSearch.c_str()
就像您使用普通的 std::string 一样。
我推荐这种方法:
wstring str = L"Hallo x y 111 2222 3333 rrr 4444 ";
wchar_t* psStr = &str[0];
这很简单,但您根本无法更改字符串的长度。所以移动“\0”可能无效......