Comprendre quel swprintf sera utilisé (ou encore, convertir une chaîne de caractères char * en wchar_t *)

J’essaie de convertir une chaîne de caractères char * en wchar_t *. J’ai vu cette question a été posée à plusieurs resockets, sans solution / solution de résolution portable.

Comme suggéré ici , swprintf m’a semblé la bonne solution, mais j’ai découvert qu’il existait deux versions! À savoir:

  1. http://www.cplusplus.com/reference/cwchar/swprintf/ (le deuxième argument est la capacité de la chaîne)
  2. http://msdn.microsoft.com/en-us/library/ybk95axf%28v=vs.71%29.aspx (le deuxième argument est déjà la chaîne de format)

Mon programme ressemblerait à ceci:

const unsigned int LOCAL_SIZE = 256; char* myCharSsortingng = "Hello world!"; wchar_t myWCharSsortingng[LOCAL_SIZE]; 

Et à ce stade:

 swprintf(myWCharSsortingng,LOCAL_SIZE,L"%hs",myCharSsortingng ); 

ou:

 swprintf(myWCharSsortingng,L"%hs",myCharSsortingng ); 

Et changer de compilateur (mingw 4.5.2 mingw 4.7.2) J’ai eu cette version différente qui a été implémentée, donc dans un cas une erreur au moment de la compilation! Mes questions:

  1. Est-il possible de savoir laquelle des deux interfaces je dois choisir au moment de la compilation?
  2. Existe-t-il un autre moyen portable de transformer une chaîne de caractères dans un wchar_t *? Je peux passer par les bibliothèques std en C ++ (pas de C ++ 11) par exemple si nécessaire

modifier

std::wssortingng_convert ne semble pas être disponible pour mon compilateur (ni 4.5.2 ni 4.7.2, y compris #include

Je vérifierai plus tard si je peux utiliser Boost Format Library pour essayer de résoudre ce problème …

Étant donné que je peux utiliser C ++ et que l’efficacité n’est pas un problème, je peux utiliser les éléments suivants:

 std::wssortingng(myCharSsortingng,myCharSsortingng+strlen(myCharSsortingng)).c_str() 

Et si mettre un wchar_t* était nécessaire, cela pourrait être comme ceci:

 strcpy(myWCharSsortingng,std::wssortingng(myCharSsortingng,myCharSsortingng+strlen(myCharSsortingng)).c_str() ); 

Testé ici .

Documentation à partir des méthodes du constructeur basic_ssortingng :

 first, last Input iterators to the initial and final positions in a range. The range used is [first,last), which includes all the characters between first and last, including the character pointed by first but not the character pointed by last. The function template argument InputIterator shall be an input iterator type that points to elements of a type convertible to charT. If InputIterator is an integral type, the arguments are casted to the proper types so that signature (5) is used instead.