在控制台上打印TCHAR []

时间:2010-05-11 16:58:01

标签: c++ visual-c++

我很确定这是一个愚蠢的问题,但它让我发疯了......

如何在控制台上打印TCHAR阵列?

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

我需要打印errmsg ......

4 个答案:

答案 0 :(得分:12)

这取决于TCHAR是什么。如果在启用Unicode的情况下进行编译,则TCHAR定义为wchar_t。然后您可以使用std::wcout,例如:

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

如果未启用Unicode,则TCHAR为普通char,您可以使用普通std::cout

std::cout << "Error: " << errmsg << '\n';

答案 1 :(得分:7)

Google搜索显示this discussion,其中基本上推荐tprintf

答案 2 :(得分:2)

#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);

答案 3 :(得分:-2)

我真的不知道为什么,但这段代码对我有用:

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");

很抱歉,但我无法解释其原因并且现在没有时间进行搜索。后来!