在控制台上打印TCHAR []

har*_*ara 7 c++ visual-c++

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

我怎么能在控制台上打印一个TCHAR阵列?

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

我需要打印errmsg ...

Tho*_*mas 12

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

std::wcout << L"Error: " << errmsg << '\n';
Run Code Online (Sandbox Code Playgroud)

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

std::cout << "Error: " << errmsg << '\n';
Run Code Online (Sandbox Code Playgroud)

  • 如果要使程序依赖于`char`还是`wchar_t`,那么即使使用TCHAR也有什么意义呢?无论你使用什么字符集,它的全部意义是工作,对吧? (7认同)
  • 为此你必须使用**tprintf**系列,这种方式它不依赖于天气**TCHAR**是**char**或**wchar** (3认同)

Jac*_*cob 7

谷歌搜索揭示了这个讨论基本上推荐tprintf.


Lum*_*umi 5

#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);
Run Code Online (Sandbox Code Playgroud)