Namespaces
Variants

wcsrtombs, wcsrtombs_s

From cppreference.net
Défini dans l'en-tête <wchar.h>
(1)
size_t wcsrtombs ( char * dst, const wchar_t ** src, size_t len, mbstate_t * ps ) ;
(depuis C95)
(jusqu'à C99)
size_t wcsrtombs ( char * restrict dst, const wchar_t ** restrict src, size_t len,
mbstate_t * restrict ps ) ;
(depuis C99)
errno_t wcsrtombs_s ( size_t * restrict retval, char * restrict dst, rsize_t dstsz,

const wchar_t ** restrict src, rsize_t len,

mbstate_t * restrict ps ) ;
(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 si dst est 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 src et dst se 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
  • dstsz ou len est supérieur à RSIZE_MAX (sauf si dst est nul)
  • dstsz n'est pas zéro (sauf si dst est nul)
  • len est supérieur à dstsz et la conversion ne rencontre ni caractère nul ni erreur d'encodage dans le tableau src au moment où dstsz est atteint (sauf si dst est nul)
Comme pour toutes les fonctions à vérification de limites, wcsrtombs_s n'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

#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

convertit une chaîne large en chaîne de caractères multioctets étroite
(fonction)
convertit un caractère large en sa représentation multioctet, avec état donné
(fonction)
convertit une chaîne de caractères multioctets étroite en chaîne large, avec état donné
(fonction)
Documentation C++ pour wcsrtombs