mbstowcs, mbstowcs_s
Depuis fr.cppreference.net
| Défini dans l'en-tête <stdlib.h>
|
||
size_t mbstowcs( wchar_t* dst, const char* src, size_t len)
|
(1) | (jusqu'à C99) |
size_t mbstowcs( wchar_t* restrict dst, const char* restrict src, size_t len)
|
(depuis C99) | |
errno_t mbstowcs_s(size_t* restrict retval, wchar_t* restrict dst,
rsize_t dstsz, const char* restrict src, rsize_t len);
|
(2) | (depuis C11) |
1) Convertit une chaîne de caractères multi-octets depuis le tableau dont le premier élément est pointé par
src vers sa représentation en caractères larges. Les caractères convertis sont stockés dans les éléments successifs du tableau pointé par dst. Au plus len caractères larges sont écrits dans le tableau de destination. Chaque caractère est converti comme par un appel à mbtowc, sauf que l'état de conversion de mbtowc n'est pas affecté. La conversion s'arrête si :
- Le caractère nul multi-octets a été converti et stocké.
- Un caractère multi-octets invalide (dans la locale courante C) a été rencontré.
- Le prochain caractère large à stocker dépasserait
len.
Si
src et dst se chevauchent, le comportement est indéfini2) Identique à (1), sauf que
- la conversion est comme par mbrtowc, pas mbtowc
- la fonction retourne son résultat comme paramètre de sortie
retval - si aucun caractère nul n'a été écrit dans
dstaprès quelencaractères larges ont été écrits, alorsL'\0'est stocké dansdst[len], ce qui signifie que len+1 caractères larges au total sont écrits - si
dstest un pointeur nul, le nombre de caractères larges qui seraient produits est stocké dans*retval - la fonction écrase le tableau de destination à partir du caractère nul final et jusqu'à
dstsz - Si
srcetdstse chevauchent, le comportement est indéfini. - les erreurs suivantes sont détectées à l'exécution et appellent la fonction gestionnaire de contrainte actuellement installée :
retvalousrcest un pointeur nuldstszoulenest supérieur à RSIZE_MAX / sizeof(wchar_t) (sauf sidstest nul)dstszn'est pas zéro (sauf sidstest nul)- Il n'y a pas de caractère nul dans les premiers
dstszcaractères multi-octets du tableausrcetlenest supérieur àdstsz(sauf sidstest nul)
- Comme toutes les fonctions vérifiées par limites,
mbstowcs_sn'est garanti d'être disponible que si__STDC_LIB_EXT1__est défini par l'implémentation et si l'utilisateur définit__STDC_WANT_LIB_EXT1__comme la constante entière1avant d'inclure <stdlib.h>.
Notes
Dans la plupart des implémentations, mbstowcs met à jour un objet statique global de type mbstate_t en parcourant la chaîne, et ne peut pas être appelée simultanément par deux threads ; mbsrtowcs devrait être utilisée dans de tels cas.
POSIX spécifie une extension courante : si dst est un pointeur nul, cette fonction retourne le nombre de caractères larges qui seraient écrits dans dst, si convertis. Un comportement similaire est standard pour mbstowcs_s et pour mbsrtowcs.
Paramètres
| dst | - | pointeur vers un tableau de caractères larges où la chaîne large sera stockée |
| src | - | pointeur vers le premier élément d'une chaîne multi-octets terminée par un caractère nul à convertir |
| len | - | nombre de caractères larges disponibles dans le tableau pointé par dst |
| dstsz | - | nombre maximal de caractères larges qui seront écrits (taille du tableau dst)
|
| retval | - | pointeur vers un objet size_t où le résultat sera stocké |
Valeur de retour
1) En cas de succès, retourne le nombre de caractères larges, sans compter le
L'\0' terminal, écrits dans le tableau de destination. En cas d'erreur de conversion (si un caractère multi-octets invalide a été rencontré), retourne (size_t)-1.2) zéro en cas de succès (auquel cas le nombre de caractères larges sans compter le zéro terminal qui ont été, ou seraient écrits dans
dst, est stocké dans *retval), non nul en cas d'erreur. En cas de violation d'une contrainte à l'exécution, stocke (size_t)-1 dans *retval (sauf si retval est nul) et définit dst[0] à L'\0' (sauf si dst est nul ou dstmax est zéro ou plus grand que RSIZE_MAX)Exemple
Exécutez ce code
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main(void)
{
setlocale(LC_ALL, "en_US.utf8");
const char* mbstr = u8"z\u00df\u6c34\U0001F34C"; // or u8"zß水🍌"
wchar_t wstr[5];
mbstowcs(wstr, mbstr, 5);
wprintf(L"MB string: %s\n", mbstr);
wprintf(L"Wide string: %ls\n", wstr);
}
Sortie :
MB string: zß水🍌
Wide string: zß水🍌
Références
- Norme C23 (ISO/IEC 9899:2024) :
- 7.22.8.1 La fonction mbstowcs (p : À déterminer)
- K.3.6.5.1 La fonction mbstowcs_s (p : À déterminer)
- Norme C17 (ISO/IEC 9899:2018) :
- 7.22.8.1 La fonction mbstowcs (p : À déterminer)
- K.3.6.5.1 La fonction mbstowcs_s (p : À déterminer)
- Norme C11 (ISO/IEC 9899:2011) :
- 7.22.8.1 La fonction mbstowcs (p : 359)
- K.3.6.5.1 La fonction mbstowcs_s (p : 611-612)
- Norme C99 (ISO/IEC 9899:1999) :
- 7.20.8.1 La fonction mbstowcs (p : 323)
- Norme C89/C90 (ISO/IEC 9899:1990) :
- 4.10.8.1 La fonction mbstowcs
Voir aussi
(C95)(C11) |
convertit une chaîne de caractères multi-octets étroite en chaîne large, en fonction de l'état (fonction) |
(C11) |
convertit une chaîne large en chaîne de caractères multi-octets étroite (fonction) |
Documentation C++ pour mbstowcs
| |