【问题标题】:Unicode string visual c++ constructorUnicode 字符串可视化 C++ 构造函数
【发布时间】:2023-03-20 08:01:01
【问题描述】:

所以,我正在使用 Visual Studio 2012,项目设置设置为“使用 unicode”。

我已将其包含在我的文件中:

#include <string>
using namespace std;

当我尝试这样做时

 //process.szExeFile - WCHAR[260]
 //name - PCSTR
if (string(process.szExeFile) == string(name))

Visual Studio 引发错误 C2665。

我做错了什么?

【问题讨论】:

  • 实际的错误文本是什么?
  • error C2665: std::basic_string<_elem>::basic_string: 17 个重载都不能转换参数
  • 试试wstring(process.szExeFile)
  • 说它不能执行操作 std::wstring == PCSTR
  • @BerNardEr:那是因为PCSTRWCHAR[] 无关。您需要了解 Windows 中 8 位和 16 位字符的区别。

标签: c++ visual-studio-2012 unicode


【解决方案1】:

我做错了什么?

当项目设置为“使用 unicode”时,process.szExeFile 字段的类型为 WCHAR[]std::string 类不提供接受 WCHAR[](或 wchar_t*)作为输入的构造函数。

您将name 变量与非Unicode 字符串进行比较,因此我假设您不关心非ASCII 字符。如果这是真的,你可以这样做:

std::wstring exeStr(process.szExeFile);
std::string exeStrA(exeStr.begin(), exeStr.end());
if (exeStrA == string(name))

如果您关心非 ASCII 字符,则应该反过来,将您的 name 字符串转换为 Unicode,例如使用 wsctombs()(您可以在此处找到示例:How do I convert a string to a wstring using the value of the string?)。

【讨论】:

  • 谢谢,我还真没想过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多