wcsrtombs
Convertit une chaîne de caractères larges dans sa représentation de chaîne de caractères multioctets. Une version plus sécurisée de cette fonction est disponible ; voir wcsrtombs_s
.
Syntaxe
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
mbstr
Emplacement adresse de la chaîne de caractères multioctets convertie obtenue.
wcstr
Pointe indirectement vers l’emplacement de la chaîne de caractères larges à convertir.
count
Nombre de caractères à convertir.
mbstate
Un pointeur vers un objet d'état de conversion mbstate_t
.
Valeur retournée
Retourne le nombre d’octets correctement convertis, sans l’octet Null de fin (le cas échéant) ou -1 si une erreur s’est produite.
Notes
La fonction wcsrtombs
convertit une chaîne de caractères larges, en commençant dans l’état de conversion spécifié dans mbstate
, à partir des valeurs pointées indirectement dans wcstr
, en adresse de mbstr
. La conversion se poursuit pour chaque caractère jusqu’à ce qu’un caractère large de fin Null ou un caractère non correspondant soit rencontré ou dès que le caractère suivant dépasse la limite contenue dans count
. Si la fonction wcsrtombs
rencontre le caractère Null de caractère large (L'\0') avant ou quand count
est atteint, elle le convertit en 0 de 8 bits et s’arrête.
Par conséquent, la chaîne de caractères multioctets au niveau de mbstr
se termine par un caractère Null seulement si wcsrtombs
rencontre un caractère Null de caractère large pendant la conversion. Si les séquences pointé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 wcsrtombs
fonction diffère de , _wcstombs_l
par wcstombs
sa capacité de redémarrage. L'état de la conversion est stocké dans mbstate
pour les appels suivants à la même ou à d'autres fonctions redémarrables. Les résultats ne sont pas définis quand l'utilisation de fonctions redémarrables est combinée avec l'utilisation de fonctions non redémarrables. Par exemple, une application utiliserait wcsrlen
plutôt que wcsnlen
si un appel ultérieur à wcsrtombs
était utilisé à la place de wcstombs
.
Si l’argument mbstr
a la valeur NULL
, wcsrtombs
retourne la taille requise de la chaîne de destination en octets. Si mbstate
a la valeur null, l’état de conversion mbstate_t
interne est utilisé. Si la séquence wchar
de caractères n’a pas de représentation de caractère multioctet correspondante, un -1 est retourné et la valeur errno
est définie EILSEQ
sur .
En C++, cette fonction a une surcharge de modèle qui appelle l'équivalent plus récent et sécurisé de cette fonction. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Exceptions
La wcsrtombs
fonction est sécurisée multithread tant qu’aucune fonction dans les appels setlocale
de thread actuel pendant l’exécution de cette fonction et n’est mbstate
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" );
}
}
The string was successfuly converted.
Spécifications
Routine | En-tête requis |
---|---|
wcsrtombs |
<wchar.h> |
Voir aussi
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