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);
4 Réponses :
Une recherche Google a révélé Cette discussion qui recommande essentiellement
Cela dépend de ce que si Unicode n'est pas activé, TCHAR code> est. Si vous compilez avec Unicode activé, TCHAR code> est défini comme wchar_t code>. Ensuite, vous pouvez utiliser std :: wcout code>, par exemple: TCHAR code> est un ordinaire Char code> et vous pouvez utiliser l'ordinaire std :: cout code>: p>
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 code> ou un wchar_t code>? Tout cela est de travailler quel que soit le jeu de personnages que vous utilisez, non?
@Strigoides: il est assez courant d'assumer TCHAR code> == wchar_t code>. À peu près, personne n'utilise TCHAR code> == char code>. Je suis d'accord avec ça étant inutile, mais je pense que est i> la norme, en particulier pour ceux qui utilisent toujours le MFC.
Pour cela, vous devez utiliser la famille TPRINTF B>, de cette façon, il ne dépend pas du sucre TCHAR B> est Char B> ou WCHAR B>
#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);
Je ne sais vraiment pas pourquoi, mais ce code a fonctionné pour moi: Désolé mais je ne peux pas vraiment expliquer pourquoi cela fonctionne et n'a pas le temps de le chercher maintenant. Plus tard! P> p>
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