我很確定這是一個愚蠢的問題,但它讓我發瘋。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