Partager via


mbstowcs, _mbstowcs_l

Convertit une séquence de caractères multioctets à une séquence correspondante à caractères larges.plus les versions sécurisées de ces fonctions sont disponibles ; consultez mbstowcs_s, _mbstowcs_s_l.

size_t mbstowcs(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count 
);
size_t _mbstowcs_l(
   wchar_t *wcstr,
   const char *mbstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
size_t mbstowcs(
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count 
); // C++ only
template <size_t size>
size_t _mbstowcs_l(
   wchar_t (&wcstr)[size],
   const char *mbstr,
   size_t count,
   _locale_t locale
); // C++ only

Paramètres

  • [out] wcstr
    l'adresse d'une séquence de caractères larges.

  • [in] mbstr
    L'adresse d'une séquence de nulle a terminé les caractères multioctets.

  • [in] count
    le nombre maximal de caractères multioctets à convertir.

  • [in] locale
    Les paramètres régionaux à utiliser.

Valeur de retour

Si mbstowcs convertit correctement la chaîne source, elle retourne le nombre de caractères multioctets convertis.Si l'argument d' wcstr est NULL, la fonction retourne la taille requise (en caractère élargi) de la chaîne de destination.Si mbstowcs rencontre un caractère multioctets valide, elle retourne et 1.si la valeur de retour est count, la chaîne à caractères larges n'est pas se terminant par null.

Note de sécuritéNote de sécurité

Assurez -vous qu' wcstr et mbstr ne se chevauchent pas, et qu' count reflète correctement le nombre de caractères multioctets pour convertir.

Notes

Le convertit de fonction d' mbstowcs jusqu'à un nombre maximal de caractères multioctets d' count entrées figurant dans mbstr à une chaîne de caractères larges correspondants qui sont déterminés par les paramètres régionaux.Elle enregistre la chaîne à caractères larges obtenu à l'adresse représentée par wcstr*.* le résultat est semblable à une série d'appels à mbtowc.Si mbstowcs rencontre le caractère NULL codé sur un octet (" \ 0 ") ou avant ou lorsque count se produit, il convertit le caractère NULL à un caractère Null à caractères larges (L \ 0 ') et s'arrête.Donc la chaîne à caractères larges à l'adresse wcstr se terminant par null uniquement si un caractère Null est produit pendant la conversion.Si les séquences pointées par wcstr et mbstr se chevauchent, le comportement n'est pas défini.

Si l'argument d' wcstr est NULL, mbstowcs retourne le nombre de caractères larges qui peuvent en résulter de la conversion, sans inclure une marque de fin null.La chaîne source doit être se terminant par null pour que la valeur appropriée soit retournée.Si vous avez besoin de la chaîne à caractères larges obtenu pour être se terminant par null, ajoutez -en une à la valeur retournée.

si l'argument d' mbstr est NULL, ou si count est > INT_MAX, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres .Si est autorisé à l'exécution de se poursuivre, l'errno est défini à EINVAL et retourne de fonction -1.

mbstowcs utilise les paramètres régionaux définis pour tout comportement dépendant des paramètres régionaux ; _mbstowcs_lest identique mais il utilise les paramètres régionaux passés à la place.Pour plus d'informations, consultez Paramètres régionaux.

En C++, ces fonctions ont des surcharges de modèle qui appellent des homologues plus récentes et sécurisées de ces fonctions.Pour plus d'informations, consultez Surcharges sécurisées de modèle.

Configuration requise

routine

en-tête requis

mbstowcs

<stdlib.h>

_mbstowcs_l

<stdlib.h>

Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.

Exemple

// crt_mbstowcs.c
// compile with: /W3
// illustrates the behavior of the mbstowcs function

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>

int main( void )
{
    size_t size;
    int nChar = 2; // number of characters to convert
    int requiredSize;

    unsigned char    *pmbnull  = NULL;
    unsigned char    *pmbhello = NULL;
    char* localeInfo;
    
    wchar_t *pwchello = L"\x3042\x3043"; // 2 Hiragana characters
    wchar_t *pwc;

    /* Enable the Japanese locale and codepage */
    localeInfo = setlocale(LC_ALL, "Japanese_Japan.932");
    printf("Locale information set to %s\n", localeInfo);
    
    printf( "Convert to multibyte string:\n" );

    requiredSize = wcstombs( NULL, pwchello, 0); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s
    printf("  Required Size: %d\n", requiredSize);

    /* Add one to leave room for the null terminator. */
    pmbhello = (unsigned char *)malloc( requiredSize + 1);
    if (! pmbhello)
    {
        printf("Memory allocation failure.\n");
        return 1;
    }
    size = wcstombs( pmbhello, pwchello, requiredSize + 1); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s
    if (size == (size_t) (-1))
    {
        printf("Couldn't convert string. Code page 932 may"
                " not be available.\n");
        return 1;
    }
    printf( "  Number of bytes written to multibyte string: %u\n",
            (unsigned int) size );
    printf( "  Hex values of the " );
    printf( " multibyte characters: %#.2x %#.2x %#.2x %#.2x\n",
            pmbhello[0], pmbhello[1], pmbhello[2], pmbhello[3] );
    printf( "  Codepage 932 uses 0x81 to 0x9f as lead bytes.\n\n");

    printf( "Convert back to wide-character string:\n" );

    /* Assume we don't know the length of the multibyte string.
     Get the required size in characters, and allocate enough space. */

    requiredSize = mbstowcs(NULL, pmbhello, 0); // C4996
    /* Add one to leave room for the NULL terminator */
    pwc = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));
    if (! pwc)
    {
        printf("Memory allocation failure.\n");
        return 1;
    }
    size = mbstowcs( pwc, pmbhello, requiredSize + 1); // C4996
    if (size == (size_t) (-1))
    {
       printf("Couldn't convert string--invalid multibyte character.\n");
    }
    printf( "  Characters converted: %u\n", (unsigned int)size );
    printf( "  Hex value of first 2" );
    printf( " wide characters: %#.4x %#.4x\n\n", pwc[0], pwc[1] );
    free(pwc);
    free(pmbhello);
}
  
  

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' exemples d'appel de code non managé.

Voir aussi

Référence

Conversion de données

Paramètres régionaux

Interprétation des séquences de caractères multioctets

_mbclen, mblen, _mblen_l

mbtowc, _mbtowc_l

wcstombs, _wcstombs_l

wctomb, _wctomb_l

MultiByteToWideChar