wcrtomb_s
Convertit un caractère large dans sa représentation de caractère multioctet. Version des améliorations de wcrtomb
sécurité décrites dans les fonctionnalités de sécurité du CRT.
Syntaxe
errno_t wcrtomb_s(
size_t *pReturnValue,
char *mbchar,
size_t sizeOfmbchar,
wchar_t *wchar,
mbstate_t *mbstate
);
template <size_t size>
errno_t wcrtomb_s(
size_t *pReturnValue,
char (&mbchar)[size],
wchar_t *wchar,
mbstate_t *mbstate
); // C++ only
Paramètres
pReturnValue
Retourne le nombre de caractères écrits ou -1 si une erreur s’est produite.
mbchar
Résultat de la conversion du caractère multioctet.
sizeOfmbchar
Taille de la variable mbchar
en octets.
wchar
Caractère large à convertir.
mbstate
Pointeur vers un objet mbstate_t
.
Valeur retournée
Retourne zéro ou une valeur errno
si une erreur se produit.
Notes
La fonction wcrtomb_s
convertit un caractère large, en commençant dans l’état de conversion spécifié dans mbstate
, à partir de la valeur contenue dans wchar
, en adresse représentée par mbchar
. La valeur pReturnValue
correspond au nombre d’octets convertis, mais pas plus de MB_CUR_MAX
octets, ou -1 si une erreur s’est produite.
Si mbstate
a la valeur null, l’état de conversion mbstate_t
interne est utilisé. Si le caractère contenu dans wchar
n’a pas de caractère multioctet correspondant, la valeur de pReturnValue
-1 et la fonction retourne la errno
valeur de EILSEQ
.
La wcrtomb_s
fonction diffère de , _wctomb_s_l
par wctomb_s
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 wcslen
si un appel ultérieur à wcsrtombs_s
était utilisé à la place de wcstombs_s
.
En C++, l’utilisation de cette fonction est simplifiée par les surcharges de modèle ; les surcharges peuvent déduire la longueur de la mémoire tampon automatiquement (ce qui évite d’avoir à spécifier un argument de taille) et peuvent remplacer automatiquement les fonctions plus anciennes et non sécurisées par leurs équivalents plus récents et sécurisés. 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 fonction wcrtomb_s
est multithread-safe tant qu’aucune fonction du thread actif n’appelle setlocale
pendant l’exécution de cette fonction et que mbstate
a la valeur Null.
Exemple
// crt_wcrtomb_s.c
// This program converts a wide character
// to its corresponding multibyte character.
//
#include <string.h>
#include <stdio.h>
#include <wchar.h>
int main( void )
{
errno_t returnValue;
size_t pReturnValue;
mbstate_t mbstate;
size_t sizeOfmbStr = 1;
char mbchar = 0;
wchar_t* wchar = L"Q\0";
// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));
returnValue = wcrtomb_s(&pReturnValue, &mbchar, sizeof(char),
*wchar, &mbstate);
if (returnValue == 0) {
printf("The corresponding wide character \"");
wprintf(L"%s\"", wchar);
printf(" was converted to a the \"%c\" ", mbchar);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
The corresponding wide character "Q" was converted to a the "Q" multibyte character.
Spécifications
Routine | En-tête requis |
---|---|
wcrtomb_s |
<wchar.h> |
Voir aussi
Conversion de données
Paramètres régionaux
Interprétation des séquences de caractères multioctets
mbsinit