2009-10-26 3 views
1

Мне нужно поместить WCHAR [] в std :: cout ... Это часть PWLAN_CONNECTION_NOTIFICATION_DATA, переданная из обратного вызова API собственного Vifi.C++, WCHAR [] to std :: cout и сравнение

Я пробовал просто std :: cout < < var; но он печатает числовой адрес первого символа. сравнение (var == L"some text") также не работает. Отладчик возвращает ожидаемое значение, однако сравнение возвращает 0. Как преобразовать этот массив в стандартную строку (std :: string)?

Заранее спасибо

+0

при сравнении '«какой-то текст»==«какой-то текст» 'может уже не получится, с простой' 'полукокса * Причина:. вы можете сравнить строки в C с' = = '. Используйте C++;' std :: wstring (L "text") == std :: wstring (L "text") ' – MSalters

ответ

3

Предполагая, что переменная является wchar_t *, var == L"some text" делает сравнение указателя. Для сравнения строку, на которую указывает вар, использовать функцию, например, wcscmp .

12

Некоторые решения:

  • Напишите StD :: wcout вместо
  • Convert:
    • Стандартный способ, с помощью зЬй :: codecvt
    • В Win32, используя WideCharToMultibyte
8

Для печати на cout вместо этого вы должны использовать std::wcout.

Что касается сравнения, я не совсем уверен, что вы имеете в виду.

  • если var является wchar_t[], то вы сравниваете два указателя. И результат скорее всего будет ложным, потому что, хотя содержимое строки может быть одинаковым, они физически распределяются в разных ячейках памяти. Ответ заключается в том, чтобы либо использовать такую ​​функцию, как strcmp, которая сравнивает строки C-стиля (указатели на символы) или использует класс строк C++.
  • и operator== обычно возвращает bool, а не целое число. Поэтому он может вернуть false, но он не может вернуть 0 ... Если вы не создали какую-то странную перегрузку самостоятельно. (И это только возможно, если var является определяемым пользователем типом.
+1

I assu меня ты имел ввиду 'wcscmp'? C++ действительно должен был перегружать 'strcmp()', чтобы взять что-нибудь строковое. Но, к сожалению, только эта математическая часть стандартной библиотеки C получила это лечение. – MSalters

+0

Правда. Я имел в виду «семейство функций strcmp». Вот почему я сказал «функция вроде». – jalf

3

использовать следующую

#ifdef UNICODE 
#define tcout wcout 
#else 
#define tcout cout 
#endif 
Смежные вопросы