我很确定这是一个愚蠢的问题,但它让我发疯了......
如何在控制台上打印TCHAR阵列?
DWORD error = WSAGetLastError();
TCHAR errmsg[512];
int ret = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, errmsg, 511, NULL);
我需要打印errmsg ......
答案 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");
很抱歉,但我无法解释其原因并且现在没有时间进行搜索。后来!