wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf - Formater des
chaînes de caractères larges
Bibliothèque C standard (
libc,
-lc)
#include <stdio.h>
#include <wchar.h>
int wprintf(const wchar_t *restrict format, ...);
int fwprintf(FILE *restrict stream,
const wchar_t *restrict format, ...);
int swprintf(wchar_t wcs[restrict .maxlen], size_t maxlen,
const wchar_t *restrict format, ...);
int vwprintf(const wchar_t *restrict format, va_list args);
int vfwprintf(FILE *restrict stream,
const wchar_t *restrict format, va_list args);
int vswprintf(wchar_t wcs[restrict .maxlen], size_t maxlen,
const wchar_t *restrict format, va_list args);
Pour toutes les fonctions ci-dessus :
" _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE0
|| _POSIX_C_SOURCE >= 200112L
La famille de fonctions
wprintf() est l'équivalent pour les
caractères larges de la famille de fonctions
printf(3). Elle
réalise une mise en forme des caractères larges.
Les fonctions
wprintf() et
vwprintf() réalisent le
traitement et la sortie de chaînes de caractères larges sur
stdout.
stdout ne doit pas être orienté octet
(consultez
fwide(3) pour plus d'informations).
Les fonctions
fwprintf() et
vfwprintf() réalisent la mise
en forme de chaînes de caractères larges en vue d'une
écriture dans le fichier
flux.
flux ne doit pas
être orienté octet (consultez
fwide(3) pour plus
d'informations).
Les fonctions
swprintf() et
vswprintf() réalisent la mise
en forme d'une chaîne de caractères larges avant de
l'écrire dans un tableau de caractères larges. Le programmeur
doit s'assurer qu'il y ait assez de place pour au moins
maxlen
caractères larges dans
wcs.
Ces fonctions se comportent de la même manière que les fonctions
printf(3),
vprintf(3),
fprintf(3),
vfprintf(3),
sprintf(3) et
vsprintf(3), hormis les différences
suivantes :
- •
- La chaîne format est une chaîne de
caractères larges.
- •
- La sortie est faite de caractères larges, pas
d'octets.
- •
-
swprintf() et vswprintf() prennent un
argument maxlen, contrairement à sprintf(3) et
vsprintf(3) ( snprintf(3) et vsnprintf(3) prennent un
argument maxlen, mais ces fonctions ne renvoient pas -1 en
cas de débordement mémoire sous Linux).
Le traitement des caractères de conversion
c et
s est
différent :
- c
- Si aucun modificateur l n'est présent,
l'argument int est converti en un caractère large par un
appel à la fonction btowc(3) et le caractère large en
résultant est écrit. Si un modificateur l est
présent, l'argument wint_t (caractère large) est
écrit.
- s
- Si aucun modificateur l n'est présent,
l'argument const char * est interprété
comme un pointeur sur un tableau de caractères (une chaîne)
contenant une séquence de caractères multioctets
commençant à l'état initial de décalage . Les
caractères du tableau sont convertis en caractères larges
(un par un par l'appel de la fonction mbrtowc(3) avec un
état de conversion réinitialisé avant le premier
octet). La chaîne de caractères larges en résultant
est écrite jusqu'au caractère NULL final (L'\0') non
compris. Si la précision est donnée, le nombre de
caractères larges écrits ne la dépassera pas. Notez
bien que la précision détermine le nombre de
caractères larges écrits et non le nombre d'
octets ou de positions d'écran. Le tableau doit
contenir un octet NULL final ('\0'), à moins que la
précision donnée soit si petite que le nombre de
caractères larges convertis est atteint avant la fin du tableau. Si
un modificateur l est présent, l'argument
const wchar_t * est interprété comme un
pointeur sur un tableau de caractères larges. Les caractères
larges du tableau sont écrits jusqu'au caractère NULL final
non compris. Si la précision est indiquée, le nombre de
caractères écrits ne la dépassera pas. Le tableau
doit contenir un caractère NULL final à moins que la
précision donnée soit inférieure ou égale au
nombre de caractères larges du tableau.
Ces fonctions renvoient le nombre de caractères larges écrits, non
compris le caractère NULL final dans le cas des fonctions
swprintf() et
vswprintf(). Elles renvoient
-1 en cas
d'erreur.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
wprintf(), fwprintf(), swprintf(),
vwprintf(), vfwprintf(), vswprintf() |
Sécurité des threads |
MT-Safe locale |
POSIX.1-2001, POSIX.1-2008, C99.
Le comportement de
wprintf() et autres dépend de la
catégorie
LC_CTYPE de la régionalisation utilisée.
Si la chaîne
format contient des caractères larges non
ASCII, le programme ne fonctionnera correctement que si la catégorie
LC_CTYPE de la régionalisation de l'exécution est la
même que lors de la compilation. En effet, la représentation de
wchar_t dépend de l'architecture et de la
régionalisation. La glibc représente les caractères
larges à l'aide de leurs codes Unicode (ISO-10646), mais les autres
architectures ne font pas de même. De plus, l'utilisation des noms de
caractères universels de C99 (de la forme \unnnn) ne résout pas
ce problème. Aussi, la chaîne
format ne devrait
être constituée que de caractères larges ASCII dans les
programmes internationalisés, ou alors elle doit être construite
à l'exécution de manière internationalisée (en
utilisant par exemple
gettext(3) ou
iconv(3), suivi de
mbstowcs(3)).
fprintf(3),
fputwc(3),
fwide(3),
printf(3),
snprintf(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]>,
Frédéric Hantrais <
[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]