C++、WCHAR[] 到 std::cout 和比较
题
我需要将 WCHAR[] 放入 std::cout ...它是从 Native Wifi API 回调传递的 PWLAN_CONNECTION_NOTIFICATION_DATA 的一部分。
我尝试简单地 std::cout << var;但它打印出第一个字符的数字地址。比较(var == L"some text"
)也不起作用。调试器返回预期值,但比较返回 0。如何将此数组转换为标准字符串(std::string)?
提前致谢
解决方案
假设var是wchar_t *
,var == L"some text"
执行指针比较。为了比较var指向的字符串,请使用wcscmp
。
其他提示
一些解决方案:
- 改为写入 std::wcout
- 转变:
- 标准方式,使用 std::codecvt
- Win32方式,使用WideCharToMultibyte
用于打印至 cout
, ,你应该使用 std::wcout
反而。
至于比较,我不太明白你的意思。
- 如果
var
是一个wchar_t[]
, ,那么您正在比较两个指针。结果很可能是假的,因为虽然字符串内容可能相同,但它们在物理上分配在不同的内存位置。答案是使用类似的函数strcmp
它比较 C 风格的字符串(字符指针),或使用 C++ 字符串类。 - 和
operator==
通常返回一个bool
, ,不是整数。所以可以返回false
, ,但无法返回0
...除非你自己创造了一些奇怪的超载。(这只有在以下情况下才有可能var
是用户定义的类型。
使用以下
#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif
不隶属于 StackOverflow