Unicode 字符串可视化 C++ 构造函数
Unicode string visual c++ constructor
因此,我使用的是 Visual Studio 2012,项目设置设置为 "use unicode"。
我已将其包含在我的文件中:
#include <string>
using namespace std;
当我尝试这样做时
//process.szExeFile - WCHAR[260]
//name - PCSTR
if (string(process.szExeFile) == string(name))
Visual studio 引发错误 C2665。
我做错了什么?
What am I doing wrong?
当项目设置为 "use unicode" 时,process.szExeFile
字段的类型为 WCHAR[]
。 std::string
class 不提供接受 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?).
因此,我使用的是 Visual Studio 2012,项目设置设置为 "use unicode"。
我已将其包含在我的文件中:
#include <string>
using namespace std;
当我尝试这样做时
//process.szExeFile - WCHAR[260]
//name - PCSTR
if (string(process.szExeFile) == string(name))
Visual studio 引发错误 C2665。
我做错了什么?
What am I doing wrong?
当项目设置为 "use unicode" 时,process.szExeFile
字段的类型为 WCHAR[]
。 std::string
class 不提供接受 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?).