我很确定这是一个愚蠢的问题,但它让我发疯。print TCHAR []在控制台上
我怎么能在控制台上打印一个TCHAR数组?
DWORD error = WSAGetLastError();
TCHAR errmsg[512];
int ret = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, errmsg, 511, NULL);
我需要打印ERRMSG ...
我很确定这是一个愚蠢的问题,但它让我发疯。print TCHAR []在控制台上
我怎么能在控制台上打印一个TCHAR数组?
DWORD error = WSAGetLastError();
TCHAR errmsg[512];
int ret = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, errmsg, 511, NULL);
我需要打印ERRMSG ...
这取决于TCHAR
是什么。如果您启用Unicode编译,TCHAR
被定义为wchar_t
。然后你可以使用std::wcout
,例如:
std::wcout << L"Error: " << errmsg << '\n';
如果不支持Unicode,TCHAR
是一个普通的char
,您可以使用普通的std::cout
:
std::cout << "Error: " << errmsg << '\n';
非常感谢:)! – hara 2010-05-11 17:13:39
即使使用TCHAR,如果要让程序依赖于它是char或者wchar_t,那又有什么意义呢?无论你使用的是什么字符集,它的全部工作就是工作,对吧? – Strigoides 2014-02-23 22:28:55
@Strigoides:假设'TCHAR' =='wchar_t'很常见。几乎没有人使用'TCHAR' =='char'。我同意这是毫无意义的,但我认为它是一种常态,对于那些仍在使用MFC的人来说尤其如此。 – 2014-12-16 21:57:35
谷歌搜索显示this discussion基本上建议tprintf。
#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);
我真的不知道为什么,但此代码为我工作:
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");
对不起,但我无法真正解释它为什么有效,现在没有时间搜索它。后来!
即使您的程序正确地将UTF16写入控制台,请注意,Windows控制台不是UTF16友好的,可能只是显示垃圾。请参阅此问题的解决方法:http://stackoverflow.com/q/10764920/845092 – 2014-12-16 21:59:05