C ++、WCHAR []からstd :: coutおよび比較
質問
WCHAR []をstd :: coutに配置する必要があります...これは、ネイティブWifi APIコールバックから渡されるPWLAN_CONNECTION_NOTIFICATION_DATAの一部です。
単にstd :: cout <!> lt; <!> lt;を試しました。 var;しかし、最初の文字の数値アドレスを出力します。比較(var == L"some text"
)も機能しません。デバッガは期待値を返しますが、比較は0を返します。この配列を標準の文字列(std :: string)に変換するにはどうすればよいですか?
事前に感謝
解決
varがwchar_t *
であると仮定すると、var == L"some text"
はポインター比較を行います。 varが指す文字列を比較するには、wcscmp
などの関数を使用します。
他のヒント
いくつかの解決策:
- 代わりにstd :: wcoutに書き込みます
- 変換:
- std :: codecvtを使用する標準的な方法
- WideCharToMultibyteを使用したWin32方式
cout
に印刷するには、代わりにstd::wcout
を使用する必要があります。
比較に関しては、どういう意味かよくわかりません。
-
var
がwchar_t[]
の場合、2つのポインターを比較しています。文字列の内容は同じかもしれませんが、それらは異なるメモリ位置に物理的に割り当てられるため、結果はほとんどの場合偽になります。答えは、Cスタイルの文字列(charポインター)を比較するstrcmp
などの関数を使用するか、C ++文字列クラスを使用することです。 - および
operator==
は通常、整数ではなくbool
を返します。したがって、false
を返すことができますが、0
を返すことはできません...奇妙なオーバーロードを自分で作成していない限り。 (そして、それは<=>がユーザー定義型の場合にのみ可能です。
次を使用
#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif
所属していません StackOverflow