Maison > développement back-end > C++ > Pourquoi tenter de convertir char en wchar_t avec mbstowcs() conduit-il à des résultats inattendus ?

Pourquoi tenter de convertir char en wchar_t avec mbstowcs() conduit-il à des résultats inattendus ?

Linda Hamilton
Libérer: 2024-10-29 07:56:30
original
522 Les gens l'ont consulté

Why Does Attempting to Convert char to wchar_t with mbstowcs() Lead to Unexpected Results?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal