распечатать TCHAR [] на консоли - PullRequest
7 голосов
/ 11 мая 2010

Я совершенно уверен, что это глупая проблема, но она сводит меня с ума ..

как я могу распечатать на консоли массив TCHAR?

DWORD error = WSAGetLastError();
TCHAR errmsg[512];
int ret = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, errmsg, 511, NULL);

мне нужно напечатать errmsg ...

Ответы [ 4 ]

12 голосов
/ 11 мая 2010

Это зависит от того, что TCHAR. Если вы компилируете с включенным Unicode, TCHAR определяется как wchar_t. Тогда вы можете использовать std::wcout, например:

std::wcout << L"Error: " << errmsg << '\n';

Если Unicode не включен, TCHAR - это обычный char, и вы можете использовать обычный std::cout:

std::cout << "Error: " << errmsg << '\n';
7 голосов
/ 11 мая 2010

Поиск в Google показал это обсуждение , которое по существу рекомендует tprintf .

2 голосов
/ 12 июля 2012
#include <tchar.h> /* _tprintf */

DWORD dwError;
BOOL fOk;
HLOCAL hlocal = NULL; // Buffer that gets the error message string

fOk = FormatMessage(
  FORMAT_MESSAGE_FROM_SYSTEM |
  FORMAT_MESSAGE_IGNORE_INSERTS |
  FORMAT_MESSAGE_ALLOCATE_BUFFER,
  NULL, dwError, 0, (PTSTR) &hlocal, 0, NULL);
if (! fOk) hlocal = TEXT("Fehler FormatMessage");
_tprintf( TEXT("%d\t%s\n"), dwError, hlocal );
if (fOk) LocalFree(hlocal);
0 голосов
/ 16 декабря 2014

Я действительно не знаю почему, но этот код работал для меня:

TCHAR NPath[MAX_PATH];
    DWORD a = GetCurrentDirectory(MAX_PATH, NPath);
    string b = "";
    for(int i=0; i<a;i++){
        b+=NPath[i];
    }
    cout << b;
    system("pause");

Извините, но я не могу объяснить, почему это работает, и у меня нет времени, чтобы искать его сейчас. Позже!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...