Question

Je suis en train de convertir une chaîne char à une chaîne de wchar.

En plus de détails: Je suis en train de convertir un char [] à un wchar [] d'abord, puis append « 1 » à cette chaîne et l'imprimer

.
char src[256] = "c:\\user";

wchar_t temp_src[256];
mbtowc(temp_src, src, 256);

wchar_t path[256];

StringCbPrintf(path, 256, _T("%s 1"), temp_src);
wcout << path;

Mais il imprime juste c

Est-ce la bonne façon de convertir char en wchar? Je suis venu à connaître une autre façon depuis. Mais je voudrais savoir pourquoi le code ci-dessus fonctionne comme il le fait?

Était-ce utile?

La solution

mbtowc convertit un seul caractère. Vouliez-vous dire utiliser mbstowcs ?

En général, vous appelez cette fonction deux fois; le premier pour obtenir la taille de la mémoire tampon nécessaire, et la seconde pour convertir réellement:

#include <cstdlib> // for mbstowcs

const char* mbs = "c:\\user";
size_t requiredSize = ::mbstowcs(NULL, mbs, 0);
wchar_t* wcs = new wchar_t[requiredSize + 1];
if(::mbstowcs(wcs, mbs, requiredSize + 1) != (size_t)(-1))
{
    // Do what's needed with the wcs string
}
delete[] wcs;

Si vous utilisez plutôt mbstowcs_s (à cause des avertissements de désapprobation), faites ceci:

#include <cstdlib> // also for mbstowcs_s

const char* mbs = "c:\\user";
size_t requiredSize = 0;
::mbstowcs_s(&requiredSize, NULL, 0, mbs, 0);
wchar_t* wcs = new wchar_t[requiredSize + 1];
::mbstowcs_s(&requiredSize, wcs, requiredSize + 1, mbs, requiredSize);
if(requiredSize != 0)
{
    // Do what's needed with the wcs string
}
delete[] wcs;

Assurez-vous que vous prenez soin de problèmes régionaux par setlocale () ou en utilisant les versions de mbstowcs() (tels que mbstowcs_l() ou mbstowcs_s_l()) qui prend un argument de localisation.

Autres conseils

pourquoi vous utilisez le code C, et pourquoi ne pas écrire d'une manière plus portable, par exemple ce que je ferais ici est d'utiliser la STL!

std::string  src = std::string("C:\\user") +
                   std::string(" 1");
std::wstring dne = std::wstring(src.begin(), src.end());

wcout << dne;

il est si simple qu'il est facile: D

L "Bonjour tout le monde"

le préfixe L en face de la chaîne fait une grande chaîne char.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top