mbsrtowcs, mbsrtowcs_s
From cppreference.net
|
Défini dans l'en-tête
<wchar.h>
|
||
| (1) | ||
|
(depuis C95)
(jusqu'à C99) |
||
| (depuis C99) | ||
| (2) | (depuis C11) | |
1)
Convertit une séquence de caractères multioctets terminée par un caractère nul, qui commence dans l'état de conversion décrit par
*ps
, depuis le tableau dont le premier élément est pointé par
*
src
vers sa représentation en caractères larges. Si
dst
n'est pas nul, les caractères convertis sont stockés dans les éléments successifs du tableau wchar_t pointé par
dst
. Pas plus de
len
caractères larges ne sont écrits dans le tableau de destination. Chaque caractère multioctet est converti comme par un appel à
mbrtowc
. La conversion s'arrête si :
-
Le caractère nul multioctet a été converti et stocké.
*
src
est défini sur la valeur de pointeur nul et
*psreprésente l'état de décalage initial. - Un caractère multioctet invalide (selon la locale C actuelle) a été rencontré. * src est défini pour pointer au début du premier caractère multioctet non converti.
-
le prochain caractère large à stocker dépasserait
len. * src est défini pour pointer au début du premier caractère multioctet non converti. Cette condition n'est pas vérifiée sidstest un pointeur nul.
2)
Identique à
(1)
, sauf que
-
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 aient été écrits, alors L ' \0 ' est stocké dansdst[len], ce qui signifie que len+1 caractères larges au total sont écrits -
la fonction écrase le tableau de destination depuis le caractère nul de fin 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 contraintes actuellement installée :
-
-
retval,ps,src, ou * src est un pointeur nul -
dstszoulenest 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 tableau * src etlenest supérieur àdstsz(sauf sidstest nul)
-
-
Comme pour toutes les fonctions à vérification de limites,
mbsrtowcs_sn'est garantie 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__ à la constante entière 1 avant d'inclure <wchar.h> .
Table des matières |
Paramètres
| dst | - | pointeur vers le tableau de caractères larges où les résultats seront stockés |
| src | - | pointeur vers le pointeur du premier élément d'une chaîne multioctet terminée par null |
| len | - | nombre de caractères larges disponibles dans le tableau pointé par dst |
| ps | - | pointeur vers l'objet d'état de conversion |
| dstsz | - |
nombre maximum de caractères larges qui seront écrits (taille du
dst
tableau)
|
| 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, à l'exclusion du caractère de fin
L
'
\0
'
, écrits dans le tableau de caractères. Si
dst
est un pointeur nul, retourne le nombre de caractères larges qui auraient été écrits avec une longueur illimitée. En cas d'erreur de conversion (si un caractère multioctet invalide a été rencontré), retourne
(
size_t
)
-
1
, stocke
EILSEQ
dans
errno
, et laisse
*
ps
dans un état non spécifié.
2)
zéro en cas de succès (auquel cas le nombre de caractères larges, à l'exclusion du zéro terminal, qui ont été ou seraient écrits dans
dst
, est stocké dans
*
retval
), non-zéro en cas d'erreur. En cas de violation de contrainte d'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 supérieur à
RSIZE_MAX
)
Exemple
Exécuter ce code
#include <stdio.h> #include <locale.h> #include <wchar.h> #include <string.h> void print_as_wide(const char* mbstr) { mbstate_t state; memset(&state, 0, sizeof state); size_t len = 1 + mbsrtowcs(NULL, &mbstr, 0, &state); wchar_t wstr[len]; mbsrtowcs(&wstr[0], &mbstr, len, &state); wprintf(L"Wide string: %ls \n", wstr); wprintf(L"The length, including L'\\0': %zu\n", len); } int main(void) { setlocale(LC_ALL, "en_US.utf8"); print_as_wide(u8"z\u00df\u6c34\U0001f34c"); // u8"zß水🍌" }
Sortie :
Wide string: zß水🍌 The length, including L'\0': 5
Références
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.29.6.4.1 La fonction mbsrtowcs (p: 445)
-
- K.3.9.3.2.1 La fonction mbsrtowcs_s (p: 648-649)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.24.6.4.1 La fonction mbsrtowcs (p: 391)
Voir aussi
|
(C11)
|
convertit une chaîne de caractères multioctets étroite en chaîne large
(fonction) |
|
(C95)
|
convertit le prochain caractère multioctet en caractère large, avec état
(fonction) |
|
(C95)
(C11)
|
convertit une chaîne large en chaîne de caractères multioctets étroite, avec état
(fonction) |
|
Documentation C++
pour
mbsrtowcs
|
|