20

我不知道如何将 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*

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

4

4 回答 4

27

如果你想从 to 转换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();

相反,如果你想修改 std::wstring's 的内容,情况就不同了。您可以使用&wstr[0](where wstris 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的内容。

于 2013-04-19T21:20:19.193 回答
16

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

WCHAR * wpProcToSearch = &wstrProcToSearch[0];

这保证可以在 C++11 中工作,并且没有已知的 C++03 实现。

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

const WCHAR * wpProcToSearch = wstrProcToSearch.c_str();
于 2013-04-19T20:59:39.513 回答
8

我认为你可以使用

wpProcToSearch = wstrProcToSearch.c_str()

就像您使用普通的 std::string 一样。

于 2013-04-19T20:53:11.943 回答
1

我推荐这种方法:

wstring str = L"Hallo  x     y   111 2222  3333 rrr 4444   ";
wchar_t* psStr = &str[0];

这很简单,但您根本无法更改字符串的长度。所以移动“\0”可能无效......

于 2018-08-15T15:00:04.363 回答