将 std::wstring 转换为 WCHAR\*

新手上路,请多包涵

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

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

std::wcin >> wstrProcToSearch;  // input std::wstring
// now i need to convert the wstring to a WCHAR*

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

原文由 Jona 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 729
2 个回答

如果你想从 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 的内容,情况就不一样了。 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它的第一个字符的地址,并注意字符连续存储在内存中),但您必须注意不要超出字符串的预分配内存。

一般来说,如果你有一个长度为 std::wstringL ,你可以从索引 0(L-1) 访问字符

C++17 之前, 覆盖终止的 '\0' (位于索引 L )是 _未定义的行为_(实际上,它在 Visual C++ 上是可以的,至少对于 VC9/VS2008 和 VC10 /VS2010)。

从 C++17 开始,使用另一个 NUL 覆盖终止的 NUL ( '\0' ) 已变为 有效 并且不再是未定义的行为。

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

原文由 Mr.C64 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 WCHAR * wpProcToSearch = &wstrProcToSearch[0];

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

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

 const WCHAR * wpProcToSearch = wstrProcToSearch.c_str();

原文由 Mark Ransom 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题