2009-04-04 7 views
2

J'essaie d'imprimer une valeur LPCWSTR dans un fichier, mais il imprime uniquement l'adresse, pas la valeur.Impression d'un LPCWSTR C++ dans un fichier

J'ai essayé de déréférencer la variable (en utilisant *) pour obtenir la valeur, mais cela ne fonctionne pas non plus.

Comment puis-je imprimer la valeur?

void dump(LPCWSTR text){ 

    ofstream myfile("C:\\myfile.txt", ios::app); 
    myfile << text << endl; 
    myfile.close(); 

} 

Merci d'avance.

Répondre

2

Utilisez wofstream (flux de base). La raison pour laquelle cela fonctionnera est que les versions w des flux std sont conçues pour fonctionner avec des chaînes de caractères larges et des données. La version étroite que vous utilisez verra une chaîne large qui contient probablement des nulls intégrés et pensera que c'est la fin de la chaîne. Wofstream va générer une sortie qui est également unicode (sans nomenclature)

+0

La raison pour laquelle la version "étroite" ne fonctionne pas est qu'il n'y a pas d'opérateur << (ostream, wchar_t *). Opérateur << (ostream, void *) cependant, et c'est ce qui est sélectionné dans ce cas –

1

Ce n'est peut-être pas ce que Brian veut. Malheureusement, si vous voulez que vos fichiers soient des caractères de 8 bits, vous allez sortir des chaînes C++ et convertir les chaînes Unicode en caractères de 8 bits.

Vous pouvez utiliser wcstombs pour convertir la chaîne en caractères de 8 bits. La conversion est effectuée dans les paramètres régionaux actuels. Assurez-vous donc d'utiliser setlocale pour vous assurer que votre conversion se déroule dans les paramètres régionaux appropriés. Malheureusement, la documentation de setlocale indique qu'il ne fonctionnera pas pour convertir en UTF-8 :(

+0

En supposant que par "sortie" vous voulez dire "ce qui est écrit dans le fichier": Il est inexact de dire que wofstream va générer une sortie Unicode Ce qu'il produit dépend de la locale imbibée (la facette de codecvt, plus précisément) du fichier –

+0

Il est également inexact de dire qu'une conversion externe est nécessaire pour obtenir des "caractères de 8 bits" au fichier wofstream * does * write octets dans le fichier, pas wchar_ts: c'est filebuf effectue la conversion wchar_t-> char en utilisant la facette codecvt de l'environnement local. –

Questions connexes