mbsnrtowcs - Convertir une séquence multioctet en chaîne de
caractères larges
Bibliothèque C standard (
libc,
-lc)
#include <wchar.h>
size_t mbsnrtowcs(wchar_t dest[restrict .len], const char **restrict src,
size_t nms, size_t len, mbstate_t *restrict ps);
mbsnrtowcs() :
Depuis la glibc 2.10 :
_POSIX_C_SOURCE >= 200809L
Avant la glibc 2.10 :
_GNU_SOURCE
La fonction
mbsnrtowcs() est équivalente à la fonction
mbsrtowcs(3), sauf qu'elle ne convertit qu'un nombre limité
à au plus
nms octets commençant en
*src.
Si
dest n'est pas un pointeur NULL, la fonction
mbsnrtowcs()
convertit au plus
nms octets depuis la séquence multioctet
*src en une chaîne de caractères larges située
dans
dest. Au maximum
len caractères larges sont
écrits dans
dest. L'état de conversion
*ps est mis
à jour. La conversion est en fait réalisée en invoquant
de façon répétée
mbrtowc(dest, *src, n,
ps), où
n est un nombre positif, aussi longtemps que l'appel
réussit, puis en incrémentant
dest de un et en augmentant
*src du nombre d'octets lus. La conversion peut s'arrêter pour
trois raisons :
- •
- Une séquence multioctet incorrecte a
été rencontrée. Dans ce cas, *src pointera sur
la séquence incorrecte, et la fonction renvoie
(size_t) -1 en positionnant errno à la valeur
EILSEQ.
- •
- The nms limit forces a stop, or len non-L'\0'
wide characters have been stored at dest. In this case, *src
is left pointing to the next multibyte sequence to be converted, and the
number of wide characters written to dest is returned.
- •
- The multibyte string has been completely converted,
including the terminating null wide character ('\0') (which has the side
effect of bringing back *ps to the initial state). In this case,
*src is set to NULL, and the number of wide characters written to
dest, excluding the terminating null wide character, is
returned.
Selon POSIX.1, si le tampon d'entrée se termine par un caractère
incomplet, il n'est pas spécifié si la conversion
s'arrête à la fin du caractère précédant
(s'il existe) ou à la fin du tampon d'entrée.
L'implémentation de la glibc suit le premier comportement.
Si
dest est NULL, alors
len est ignoré, et la conversion se
déroule comme précédemment, sauf que les
caractères convertis ne sont pas écrits en mémoire, et
qu'aucune limite de destination n'est prise en compte.
Dans tous les cas, si
ps est un pointeur NULL, un état anonyme
statique, réservé à la fonction
mbsnrtowcs() est
utilisé à sa place.
Le programmeur doit s'assurer qu'il y assez de place pour au moins
len
caractères larges dans
dest.
La fonction
mbsnrtowcs() renvoie le nombre de caractères larges
placés dans la zone convertie, sans compter le caractère nul
final. Si une séquence multioctet incorrecte est rencontrée, la
fonction renvoie
(size_t) -1, et
errno contient
EILSEQ.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
mbsnrtowcs() |
Sécurité des threads |
MT-Unsafe race:mbsnrtowcs/!ps |
POSIX.1-2008.
Le comportement de
mbsnrtowcs() dépend de la catégorie
LC_CTYPE de la localisation en cours.
Passer NULL dans
ps n'est pas sûr dans un contexte multithread.
iconv(3),
mbrtowc(3),
mbsinit(3),
mbsrtowcs(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]>,
Jean-Baptiste Holcroft <
[email protected]> et Grégoire
Scano <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]