wcsrtombs, wcsrtombs_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 larges du tableau dont le premier élément est pointé par
*
src
en sa représentation multioctet étroite qui commence dans l'état de conversion décrit par
*
ps
. Si
dst
n'est pas nul, les caractères convertis sont stockés dans les éléments successifs du tableau de caractères pointé par
dst
. Pas plus de
len
octets ne sont écrits dans le tableau de destination. Chaque caractère est converti comme par un appel à
wcrtomb
. La conversion s'arrête si :
- Le caractère nul L ' \0 ' a été converti et stocké. Les octets stockés dans ce cas sont la séquence de désactivation (si nécessaire) suivie de ' \0 ' , * src est défini sur la valeur de pointeur nul et * ps représente l'état de décalage initial.
- Un wchar_t a été trouvé qui ne correspond pas à un caractère valide dans les paramètres régionaux C actuels. * src est défini pour pointer vers le premier caractère large non converti.
-
le prochain caractère multioctet à stocker dépasserait
len. * src est défini pour pointer vers le premier caractère large 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 la conversion s'arrête sans écrire un caractère nul, la fonction stockera
'
\0
'
dans l'octet suivant de
dst, qui peut être dst [ len ] ou dst [ dstsz ] , selon ce qui vient en premier (ce qui signifie que jusqu'à len+1/dstsz+1 octets au total peuvent être écrits). Dans ce cas, il se peut qu'aucune séquence de désengagement ne soit écrite avant le caractère nul de terminaison. -
la fonction écrase le tableau de destination à partir du caractère nul de terminaison et jusqu'à
dstsz -
Si
srcetdstse chevauchent, le comportement est non spécifié. - 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 (sauf sidstest nul) -
dstszn'est pas zéro (sauf sidstest nul) -
lenest supérieur àdstszet la conversion ne rencontre ni caractère nul ni erreur d'encodage dans le tableausrcau moment oùdstszest atteint (sauf sidstest nul)
-
-
Comme pour toutes les fonctions à vérification de limites,
wcsrtombs_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 étroits où les caractères multi-octets seront stockés |
| src | - | pointeur vers le pointeur du premier élément d'une chaîne large terminée par un caractère nul |
| len | - | nombre d'octets disponibles dans le tableau pointé par dst |
| ps | - | pointeur vers l'objet d'état de conversion |
| dstsz | - |
nombre maximum d'octets 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 d'octets (y compris les séquences de décalage, mais excluant le caractère de fin
'
\0
'
) écrits dans le tableau de caractères dont le premier élément est pointé par
dst
. Si
dst
est un pointeur nul, retourne le nombre d'octets qui auraient été écrits. En cas d'erreur de conversion (si un caractère large invalide a été rencontré), retourne
(
size_t
)
-
1
, stocke
EILSEQ
dans
errno
, et laisse
*
ps
dans un état non spécifié.
2)
Retourne zéro en cas de succès (auquel cas le nombre d'octets, à 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
]
à
'
\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 <string.h> #include <wchar.h> void print_wide(const wchar_t* wstr) { mbstate_t state; memset(&state, 0, sizeof state); size_t len = 1 + wcsrtombs(NULL, &wstr, 0, &state); char mbstr[len]; wcsrtombs(mbstr, &wstr, len, &state); printf("Multibyte string: %s\n", mbstr); printf("Length, including '\\0': %zu\n", len); } int main(void) { setlocale(LC_ALL, "en_US.utf8"); print_wide(L"z\u00df\u6c34\U0001f34c"); // or L"zß水🍌" }
Sortie :
Multibyte string: zß水🍌 Length, including '\0': 11
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.29.6.4.2 La fonction wcsrtombs (p : 324-325)
-
- K.3.9.3.2.2 La fonction wcsrtombs_s (p : 471-472)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 7.29.6.4.2 La fonction wcsrtombs (p: 446)
-
- K.3.9.3.2.2 La fonction wcsrtombs_s (p: 649-651)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.24.6.4.2 La fonction wcsrtombs (p: 392)
Voir aussi
|
(C11)
|
convertit une chaîne large en chaîne de caractères multioctets étroite
(fonction) |
|
(C95)
(C11)
|
convertit un caractère large en sa représentation multioctet, avec état donné
(fonction) |
|
(C95)
(C11)
|
convertit une chaîne de caractères multioctets étroite en chaîne large, avec état donné
(fonction) |
|
Documentation C++
pour
wcsrtombs
|
|