2010-05-11 5 views
6

나는 바보 같은 문제이지만 그것이 나를 미치게한다고 확신합니다.콘솔의 TCHAR [] 인쇄

콘솔에 TCHAR 어레이를 어떻게 인쇄 할 수 있습니까?

난에 errmsg를 인쇄해야
DWORD error = WSAGetLastError(); 
TCHAR errmsg[512]; 
int ret = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, errmsg, 511, NULL); 

...

+0

프로그램에 UTF16을 콘솔에 올바로 작성하게하더라도 Windows 콘솔은 UTF16과 호환되지 않으므로 가비지 만 표시 될 수 있습니다. 해결 방법은 다음 질문을 참조하십시오. http://stackoverflow.com/q/10764920/845092 –

답변

10

무엇이 TCHAR인지에 따라 다릅니다. 유니 코드 사용 가능으로 컴파일하는 경우 TCHARwchar_t으로 정의됩니다. 그럼 당신은 예를 들어, std::wcout를 사용할 수 있습니다

유니 코드를 사용하지 않는 경우
std::wcout << L"Error: " << errmsg << '\n'; 

, TCHAR는 일반 char이며, 당신은 std::cout 일반 사용할 수 있습니다

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

감사합니다. :)! – hara

+6

프로그램이'char' 또는'wchar_t'에 의존하게 만들려면 TCHAR을 사용하는 것이 무엇이겠습니까? 그것의 요점은 당신이 사용하고있는 캐릭터 셋에 관계없이 작동하는 것입니다, 그렇죠? – Strigoides

+0

@ Strigoides :'TCHAR' =='wchar_t'라고 가정하는 것이 꽤 일반적입니다. 거의 아무도'TCHAR' =='char'을 사용하지 않습니다. 나는 그것이 무의미하다는 것에 동의하지만, 여전히 MFC를 사용하는 사람들에게는 이것이 표준이라고 생각한다. –

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

미안하지만, 왜 그것이 작동하는지 지금 설명 할 수는 없으며 지금 검색 할 시간이 없습니다. 후에!