2010-05-11 14 views
6

Estoy seguro de que es un tema estúpido, pero me vuelve loca ..de impresión TCHAR [] en la consola

¿Cómo podría imprimir en la consola de una matriz TCHAR?

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

i necesidad de imprimir errmsg ...

+0

Incluso si obtiene su programa para escribir UTF16 correctamente en la consola, tenga en cuenta que la consola de Windows no es compatible con UTF16 y puede mostrar basura. Vea esta pregunta para soluciones: http://stackoverflow.com/q/10764920/845092 –

Respuesta

10

Depende de lo que TCHAR es. Si compila con Unicode habilitado, TCHAR se define como wchar_t. A continuación, puede utilizar std::wcout, por ejemplo:

std::wcout << L"Error: " << errmsg << '\n'; 

Si Unicode no está activada, TCHAR es un ordinario char y se puede utilizar la ordinaria std::cout: no

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

muchas gracias :)! – hara

+6

¿De qué sirve incluso usar TCHAR si vas a hacer que tu programa dependa de si es un 'char' o un' wchar_t'? El objetivo de todo esto es trabajar independientemente de qué conjunto de caracteres estés usando, ¿no? – Strigoides

+0

@Strigoides: es bastante común suponer 'TCHAR' ==' wchar_t'. Casi nadie usa 'TCHAR' ==' char'. Estoy de acuerdo con que no tiene sentido, pero creo que es la norma, especialmente para aquellos que todavía usan 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

realmente lo creo saber por qué pero este código funcionó para mí:

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

Lo siento, pero realmente no puedo explicar por qué funciona y no tengo tiempo para buscarlo ahora. ¡Luego!

Cuestiones relacionadas