Partager via


wcsrtombs

Convertir une chaîne de caractères larges en sa représentation de chaîne de caractères multioctets. Des versions plus sécurisées de ces fonctions sont disponibles ; consultez wcsrtombs_s.

size_t wcsrtombs(
   char *mbstr,
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
);
template <size_t size>
size_t wcsrtombs(
   char (&mbstr)[size],
   const wchar_t **wcstr,
   sizeof count,
   mbstate_t *mbstate
); // C++ only

Paramètres

  • [out] mbstr
    L'emplacement de l'adresse de la chaîne de caractères multioctets convertie résultante.

  • [in] wcstr
    Pointe indirectement vers l'emplacement de la chaîne de caractères larges à convertir.

  • [in] count
    Nombre de caractères à convertir.

  • [in] mbstate
    Un pointeur vers un objet d'état de conversion mbstate_t .

Valeur de retour

Retourne le nombre d'octets correctement convertis, à l'exclusion de l'octet null de fin (s'il existe), sinon -1 si une erreur se produit.

Notes

La fonction wcsrtombs convertit une chaîne de caractères larges, depuis l'état de conversion spécifié contenu dans mbstate, depuis les valeurs indirectement référencées dans wcstr, dans l'adresse de mbstr. La conversion se poursuit pour chaque caractère jusqu'à ce que : après avoir rencontré un caractère large de fin null, ou si le caractère suivant excède la limite contenue dans count. Si wcsrtombs rencontre le caractère large null (L'\0') avant ou lorsque count arrive, il le convertit en un zéro de 8 bits et s'arrête.

Par conséquent, la chaîne de caractères multioctets à mbstr se termine par null uniquement si wcsrtombs rencontre un caractère NULL de caractères larges lors de la conversion. Si les séquences désignées par wcstr et mbstr se chevauchent, le comportement de wcsrtombs n'est pas défini. wcsrtombs est affecté par la catégorie LC_TYPE des paramètres régionaux actuels.

La fonction wcsrtombs diffère de wcstombs, _wcstombs_l par sa capacité à redémarrer. L'état de conversion est stocké dans mbstate pour d'autres appels à la même ou a d'autres fonctions redémarrable. Les résultats sont indéfinis lorqu'on mélange l'utilisation de fonctions redémarrable et non redémarrable. Par exemple, une application utilise wcsrlen plutôt que wcsnlen, si l'appel suivant à wcsrtombs est utilisé à la place de wcstombs

Si l'argument mbstr est NULL, wcsrtombs retourne la taille requise en octets de la chaine de destination. Si mbstate est NULL, l'état de conversion interne mbstate_t est utilisé. Si la séquence de caractères wchar n'a pas une représentation correspondante en caractères multioctets, -1 est retourné et errno est défini à la valeur EILSEQ.

En C++, cette fonction a une surcharge de modèle qui appelle les équivalents plus récents et sécurisés de cette fonction. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.

Exceptions

La fonction wcsrtombs est multithread-safe à condition qu'aucune fonction du thread actuel n'appelle setlocale lorsque cette fonction s'exécute et que mbstate n'est pas null.

Exemple

// crt_wcsrtombs.cpp
// compile with: /W3
// This code example converts a wide
// character string into a multibyte
// character string.

#include <stdio.h>
#include <memory.h>
#include <wchar.h>
#include <errno.h>

#define MB_BUFFER_SIZE 100

int main()
{
    const wchar_t   wcString[] = 
                    {L"Every good boy does fine."};
    const wchar_t   *wcsIndirectString = wcString;
    char            mbString[MB_BUFFER_SIZE];
    size_t          countConverted;
    mbstate_t       mbstate;

    // Reset to initial shift state
    ::memset((void*)&mbstate, 0, sizeof(mbstate));

    countConverted = wcsrtombs(mbString, &wcsIndirectString,
                               MB_BUFFER_SIZE, &mbstate); // C4996
    // Note: wcsrtombs is deprecated; consider using wcsrtombs_s
    if (errno == EILSEQ)
    {
        printf( "An encoding error was detected in the string.\n" );
    }
    else 
    {
        printf( "The string was successfuly converted.\n" );
    }
}
  

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Configuration requise

Routine

En-tête requis

wcsrtombs

<wchar.h>

Voir aussi

Référence

Conversion de données

Paramètres régionaux

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

wcrtomb

wcrtomb_s

wctomb, _wctomb_l

wcstombs, _wcstombs_l

mbsinit