Comment convertir correctement char en wchar_t pour l'intégration Unicode
Conversion de char chaînes en wchar_t est essentiel pour intégrer des chaînes de caractères normales dans les applications Unicode. Une approche courante consiste à utiliser la fonction mbstowcs().
Tentative originale :
Le code suivant peut sembler une implémentation simple mais donne malheureusement des résultats inattendus :
<code class="c++">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs (wc, c, cSize); return wc; }</code>
Approfondir :
Le problème réside dans la déclaration de wc en tant que variable locale. Au retour de la fonction, wc devient désalloué, laissant la fonction avec un pointeur pointant vers la mémoire inutile.
Solution :
Pour résoudre ce problème, nous allouons dynamiquement la mémoire pour wc et renvoyez-lui un pointeur. Le code modifié ci-dessous le démontre :
<code class="c++">const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t* wc = new wchar_t[cSize]; mbstowcs (wc, c, cSize); return wc; }</code>
Attention :
Il est crucial de noter que le code appelant est désormais responsable de la désallocation de la mémoire allouée dynamiquement pour empêcher la mémoire fuites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!