C ++: LPWSTR печатает как адрес в cout - PullRequest
5 голосов
/ 03 мая 2011

У меня есть переменная типа LPTSTR, которую я печатаю до std::cout с <<. В системе ANSI (не знаю точно, где это определяется) он работал нормально, он печатал строку. Теперь в системе Unicode я получаю шестнадцатеричный адрес вместо строки. Итак, почему LPSTR (к которому разрешается LPTSTR, если UNICODE не определено) действует иначе, чем LPWSTR (... если определено UNICODE) и как мне распечатать строку, указанную последней?

1 Ответ

10 голосов
/ 03 мая 2011

Для строк Unicode вы хотите wcout.

Возможно, вы видите hex, потому что поток вывода ANSI / ASCII не знает, как обрабатывать символы Unicode.

LPTSTR и LPWSTR на самом деле являются C-измами, унаследованными от дней API C Windows. Для C ++ я настоятельно рекомендую вам использовать std::string и / или std::wstring.

Если вам нужно свернуть свой собственный макрос, вам понадобится что-то вроде:

#ifdef _UNICODE
#define COUT wcout
#else
#define COUT cout
#endif
...