8
votes

imprimer TCHAR [] sur la console

Je suis sûr que c'est un problème stupide, mais cela me rend fou ..

Comment puis-je imprimer sur la console un tableau TCHAR? P>

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


1 commentaires

Même si vous obtenez votre programme pour écrire correctement UTF16 à la console, notez que la console Windows n'est pas acceptable et peut simplement montrer des ordures. Voir cette question pour Solution de contournement: Stackoverflow.com/q/10764920/845092


4 Réponses :


7
votes

Une recherche Google a révélé Cette discussion qui recommande essentiellement TPRINTF .


0 commentaires

15
votes

Cela dépend de ce que TCHAR est. Si vous compilez avec Unicode activé, TCHAR est défini comme wchar_t . Ensuite, vous pouvez utiliser std :: wcout , par exemple: xxx

si Unicode n'est pas activé, TCHAR est un ordinaire Char et vous pouvez utiliser l'ordinaire std :: cout : xxx


3 commentaires

Quel est le point de même en utilisant TCHAR si vous allez rendre votre programme dépendant de la question de savoir si c'est un char ou un wchar_t ? Tout cela est de travailler quel que soit le jeu de personnages que vous utilisez, non?


@Strigoides: il est assez courant d'assumer TCHAR == wchar_t . À peu près, personne n'utilise TCHAR == char . Je suis d'accord avec ça étant inutile, mais je pense que est la norme, en particulier pour ceux qui utilisent toujours le MFC.


Pour cela, vous devez utiliser la famille TPRINTF , de cette façon, il ne dépend pas du sucre TCHAR est Char ou WCHAR



3
votes
#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);

0 commentaires

-3
votes

Je ne sais vraiment pas pourquoi, mais ce code a fonctionné pour moi: XXX

Désolé mais je ne peux pas vraiment expliquer pourquoi cela fonctionne et n'a pas le temps de le chercher maintenant. Plus tard!


0 commentaires