wcstombs, wcstombs_s
|
Défini dans l'en-tête
<stdlib.h>
|
||
| (1) | ||
| (jusqu'à C99) | ||
| (depuis C99) | ||
|
errno_t wcstombs_s
(
size_t
*
restrict
retval,
char
*
restrict
dst, rsize_t dstsz,
const wchar_t * restrict src, rsize_t len ) ; |
(2) | (depuis C11) |
src
en sa représentation multioctet étroite qui commence dans l'état de décalage initial. 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 sont écrits dans le tableau de destination.
len
.
src
et
dst
se chevauchent, le comportement n'est pas spécifié.
retval
dst
, qui peut être
dst[len]
ou
dst[dstsz]
, selon celui 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écalage ne soit écrite avant le caractère nul de terminaison.
dst
est un pointeur nul, le nombre d'octets qui seraient produits est stocké dans
*
retval
dstsz
src
et
dst
se chevauchent, le comportement n'est pas spécifié.
-
-
retvalousrcest 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 pas de caractère nul ou d'erreur d'encodage dans le tableausrcavant d'atteindredstsz(sauf sidstest nul)
-
-
Comme pour toutes les fonctions à vérification de limites,
wcstombs_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 <stdlib.h> .
Table des matières |
Notes
Dans la plupart des implémentations,
wcstombs
met à jour un objet statique global de type
mbstate_t
pendant le traitement de la chaîne, et ne peut pas être appelée simultanément par deux threads,
wcsrtombs
ou
wcstombs_s
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 d'octets qui seraient écrits dans
dst
, s'ils étaient convertis. Un comportement similaire est standard pour
wcsrtombs
et
wcstombs_s
.
Paramètres
| dst | - | pointeur vers le tableau de caractères étroits où le caractère multi-octets sera stocké |
| src | - | pointeur vers le premier élément d'une chaîne large terminée par un caractère nul à convertir |
| len | - | nombre d'octets disponibles dans le tableau pointé par dst |
| 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
dst
. En cas d'erreur de conversion (si un caractère large invalide a été rencontré), retourne
(
size_t
)
-
1
.
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
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(void) { // 4 caractères larges const wchar_t src[] = L"z\u00df\u6c34\U0001f34c"; // ils occupent 10 octets en UTF-8 char dst[11]; setlocale(LC_ALL, "en_US.utf8"); printf("wide-character string: '%ls'\n",src); for (size_t ndx=0; ndx < sizeof src/sizeof src[0]; ++ndx) printf(" src[%2zu] = %#8x\n", ndx, src[ndx]); int rtn_val = wcstombs(dst, src, sizeof dst); printf("rtn_val = %d\n", rtn_val); if (rtn_val > 0) printf("multibyte string: '%s'\n",dst); for (size_t ndx=0; ndx<sizeof dst; ++ndx) printf(" dst[%2zu] = %#2x\n", ndx, (unsigned char)dst[ndx]); }
Sortie :
wide-character string: 'zß水🍌' src[ 0] = 0x7a src[ 1] = 0xdf src[ 2] = 0x6c34 src[ 3] = 0x1f34c src[ 4] = 0 rtn_val = 10 multibyte string: 'zß水🍌' dst[ 0] = 0x7a dst[ 1] = 0xc3 dst[ 2] = 0x9f dst[ 3] = 0xe6 dst[ 4] = 0xb0 dst[ 5] = 0xb4 dst[ 6] = 0xf0 dst[ 7] = 0x9f dst[ 8] = 0x8d dst[ 9] = 0x8c dst[10] = 0
Références
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.22.8.2 La fonction wcstombs (p: 360)
-
- K.3.6.5.2 La fonction wcstombs_s (p: 612-614)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.20.8.2 La fonction wcstombs (p: 324)
- Norme C89/C90 (ISO/CEI 9899:1990) :
-
- 4.10.8.2 La fonction wcstombs
Voir aussi
|
(C95)
(C11)
|
convertit une chaîne large en chaîne de caractères multioctets étroite, avec état
(fonction) |
|
(C11)
|
convertit une chaîne de caractères multioctets étroite en chaîne large
(fonction) |
|
Documentation C++
pour
wcstombs
|
|