wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
|
Défini dans l'en-tête
<wchar.h>
|
||
| (1) | ||
|
int
wprintf
(
const
wchar_t
*
format, ...
)
;
|
(depuis C95)
(jusqu'à C99) |
|
|
int
wprintf
(
const
wchar_t
*
restrict
format, ...
)
;
|
(depuis C99) | |
| (2) | ||
|
int
fwprintf
(
FILE
*
stream,
const
wchar_t
*
format, ...
)
;
|
(depuis C95)
(jusqu'à C99) |
|
|
int
fwprintf
(
FILE
*
restrict
stream,
const wchar_t * restrict format, ... ) ; |
(depuis C99) | |
| (3) | ||
|
int
swprintf
(
wchar_t
*
buffer,
size_t
bufsz,
const wchar_t * format, ... ) ; |
(depuis C95)
(jusqu'à C99) |
|
|
int
swprintf
(
wchar_t
*
restrict
buffer,
size_t
bufsz,
const wchar_t * restrict format, ... ) ; |
(depuis C99) | |
|
int
wprintf_s
(
const
wchar_t
*
restrict
format, ...
)
;
|
(4) | (depuis C11) |
|
int
fwprintf_s
(
FILE
*
restrict
stream,
const wchar_t * restrict format, ... ) ; |
(5) | (depuis C11) |
|
int
swprintf_s
(
wchar_t
*
restrict
buffer, rsize_t bufsz,
const wchar_t * restrict format, ... ) ; |
(6) | (depuis C11) |
|
int
snwprintf_s
(
wchar_t
*
restrict
s, rsize_t n,
const wchar_t * restrict format, ... ) ; |
(7) | (depuis C11) |
Charge les données à partir des emplacements donnés, les convertit en équivalents de chaînes larges et écrit les résultats vers divers récepteurs.
-
-
le spécificateur de conversion
%nest présent dans format -
l'un des arguments correspondant à
%sest un pointeur nul - format ou buffer est un pointeur nul
- bufsz est zéro ou supérieur à RSIZE_MAX / sizeof ( wchar_t )
- des erreurs d'encodage surviennent dans l'un des spécificateurs de conversion de chaîne ou de caractère
-
(uniquement pour
swprintf_s) le nombre de caractères larges à écrire, y compris le caractère nul, dépasserait bufsz .
-
le spécificateur de conversion
-
Comme pour toutes les fonctions à vérification de limites,
wprintf_s,fwprintf_s,swprintf_s, etsnwprintf_sne sont garanties d'être disponibles 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 <stdio.h> .
Table des matières |
Paramètres
| stream | - | flux de fichier de sortie vers lequel écrire |
| buffer | - | pointeur vers une chaîne de caractères larges à écrire |
| bufsz | - | jusqu'à bufsz - 1 caractères larges peuvent être écrits, plus le terminateur nul |
| format | - | pointeur vers une chaîne large terminée par un nul spécifiant comment interpréter les données |
| ... | - | arguments spécifiant les données à imprimer. Si un argument après promotions d'arguments par défaut n'est pas du type attendu par le spécificateur de conversion correspondant, ou s'il y a moins d'arguments que requis par format , le comportement est indéfini. S'il y a plus d'arguments que requis par format , les arguments superflus sont évalués et ignorés. |
La chaîne de
format
est composée de caractères larges ordinaires (à l'exception de
%
), qui sont copiés tels quels dans le flux de sortie, et de spécifications de conversion. Chaque spécification de conversion a le format suivant :
-
-
introductoire
%caractère.
-
introductoire
-
- (optionnel) un ou plusieurs drapeaux qui modifient le comportement de la conversion :
-
-
-: le résultat de la conversion est justifié à gauche dans le champ (par défaut il est justifié à droite). -
+: le signe des conversions signées est toujours ajouté au début du résultat de la conversion (par défaut le résultat est précédé d'un moins uniquement lorsqu'il est négatif). -
espace
: si le résultat d'une conversion signée ne commence pas par un caractère de signe, ou est vide, un espace est ajouté au début du résultat. Il est ignoré si le drapeau
+est présent. -
#: la forme alternative de la conversion est effectuée. Voir le tableau ci-dessous pour les effets exacts, sinon le comportement est indéfini. -
0: pour les conversions de nombres entiers et à virgule flottante, des zéros non significatifs sont utilisés pour remplir le champ au lieu des caractères espace . Pour les nombres entiers, il est ignoré si la précision est explicitement spécifiée. Pour d'autres conversions, l'utilisation de ce drapeau entraîne un comportement indéfini. Il est ignoré si le drapeau-est présent.
-
-
-
(optionnel)
valeur entière ou
*qui spécifie la largeur minimale du champ. Le résultat est complété avec des caractères espace (par défaut), si nécessaire, à gauche lors de l'alignement à droite, ou à droite lors de l'alignement à gauche. Dans le cas où*est utilisé, la largeur est spécifiée par un argument supplémentaire de type int , qui apparaît avant l'argument à convertir et l'argument fournissant la précision si celle-ci est fournie. Si la valeur de l'argument est négative, cela entraîne l'activation du drapeau-et une largeur de champ positive (Note : Ceci est la largeur minimale : La valeur n'est jamais tronquée.).
-
(optionnel)
valeur entière ou
-
-
(optionnel)
.suivi d'un nombre entier ou*, ou ni l'un ni l'autre, qui spécifie la précision de la conversion. Dans le cas où*est utilisé, la précision est spécifiée par un argument supplémentaire de type int , qui apparaît avant l'argument à convertir, mais après l'argument fournissant la largeur minimale du champ si celui-ci est fourni. Si la valeur de cet argument est négative, elle est ignorée. Si ni un nombre ni*n'est utilisé, la précision est prise comme zéro. Voir le tableau ci-dessous pour les effets exacts de la précision .
-
(optionnel)
-
- (optionnel) modificateur de longueur qui spécifie la taille de l'argument (en combinaison avec le spécificateur de format de conversion, il spécifie le type de l'argument correspondant).
-
- spécificateur de format de conversion.
Les spécificateurs de format suivants sont disponibles :
|
Spécificateur
de Conversion |
Explication |
Type d'Argument
Attendu |
||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Modificateur de longueur→ | hh | h | aucun | l | ll | j | z | t | L | |
| Uniquement disponible depuis C99→ | Oui | Oui | Oui | Oui | Oui | |||||
%
|
Écrit le caractère littéral
%
. La spécification de conversion complète doit être
%%
.
|
N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
Écrit un caractère unique .
|
N/A | N/A |
int
|
wint_t
|
N/A | N/A | N/A | N/A | N/A |
s
|
Écrit une chaîne de caractères .
|
N/A | N/A |
char
*
|
wchar_t
*
|
N/A | N/A | N/A | N/A | N/A |
d
i
|
Convertit un entier signé en représentation décimale [-]dddd .
|
signed
char
|
short
|
int
|
long
|
long
long
|
※
|
N/A | ||
o
|
Convertit un entier non signé en représentation octale oooo .
|
unsigned
char
|
unsigned
short
|
unsigned
int
|
unsigned
long
|
unsigned
long
long
|
version non signée de
ptrdiff_t
|
N/A | ||
x
X
|
Convertit un entier non signé en représentation hexadécimale hhhh .
|
N/A | ||||||||
u
|
Convertit un entier non signé en représentation décimale dddd .
|
N/A | ||||||||
f
F
(C99)
|
Convertit un nombre à virgule flottante en notation décimale selon le style [-]ddd.ddd .
|
N/A | N/A |
double
|
double
(C99)
|
N/A | N/A | N/A | N/A |
long
double
|
e
E
|
Convertit un nombre à virgule flottante en notation exponentielle décimale.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
a
A
(C99) |
Convertit un nombre à virgule flottante en notation exponentielle hexadécimale.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
g
G
|
Convertit un nombre à virgule flottante en notation décimale ou en notation exponentielle décimale selon la valeur et la précision .
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
n
|
Retourne le nombre de caractères écrits jusqu'à présent par cet appel de la fonction.
|
signed
char
*
|
short
*
|
int
*
|
long
*
|
long
long
*
|
intmax_t
*
|
※
|
N/A | |
p
|
Écrit une séquence de caractères définie par l'implémentation représentant un pointeur . |
N/A | N/A |
void
*
|
N/A | N/A | N/A | N/A | N/A | N/A |
| Notes | ||||||||||
|
Les fonctions de conversion en virgule flottante convertissent l'infini en
La valeur non numérique est convertie en
Les conversions
Le spécificateur de conversion utilisé pour afficher char , unsigned char , signed char , short , et unsigned short attend des types promus des promotions d'arguments par défaut , mais avant l'affichage, sa valeur sera convertie en char , unsigned char , signed char , short , et unsigned short . Il est sûr de passer des valeurs de ces types en raison de la promotion qui a lieu lors de l'appel d'une fonction variadique.
Les spécifications de conversion correctes pour les types de caractères de largeur fixe (
int8_t
, etc) sont définies dans l'en-tête
<inttypes.h>
(bien que
PRIdMAX
,
PRIuMAX
, etc soient synonymes de
Le spécificateur de conversion d'écriture en mémoire
Il y a un
point de séquence
après l'action de chaque spécificateur de conversion ; cela permet de stocker plusieurs résultats
Si une spécification de conversion est invalide, le comportement est indéfini. |
||||||||||
Valeur de retour
Notes
Alors que les chaînes étroites fournissent
snprintf
, ce qui permet de déterminer la taille requise du tampon de sortie, il n'existe pas d'équivalent pour les chaînes larges
(jusqu'à
snwprintf_s
)
(depuis C11)
, et afin de déterminer la taille du tampon, le programme peut avoir besoin d'appeler
swprintf
, vérifier la valeur de résultat, et réallouer un tampon plus grand, en réessayant jusqu'à réussite.
snwprintf_s
, contrairement à
swprintf_s
, tronquera le résultat pour qu'il tienne dans le tableau pointé par
buffer
, bien que la troncation soit traitée comme une erreur par la plupart des fonctions avec vérification des limites.
Exemple
#include <locale.h> #include <wchar.h> int main(void) { char narrow_str[] = "z\u00df\u6c34\U0001f34c"; // or "zß水🍌" // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"; wchar_t warr[29]; // the expected string is 28 characters plus 1 null terminator setlocale(LC_ALL, "en_US.utf8"); swprintf(warr, sizeof warr / sizeof* warr, L"Converted from UTF-8: '%s'", narrow_str); wprintf(L"%ls\n", warr); }
Sortie :
Converted from UTF-8: 'zß水🍌'
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.29.2.1 La fonction fwprintf (p: TBD)
-
- 7.29.2.3 La fonction swprintf (p: TBD)
-
- 7.29.2.11 La fonction wprintf (p: TBD)
-
- K.3.9.1.1 La fonction fwprintf_s (p: TBD)
-
- K.3.9.1.4 La fonction swprintf_s (p: TBD)
-
- K.3.9.1.13 La fonction wprintf_s (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.29.2.1 La fonction fwprintf (p: TBD)
-
- 7.29.2.3 La fonction swprintf (p: TBD)
-
- 7.29.2.11 La fonction wprintf (p: TBD)
-
- K.3.9.1.1 La fonction fwprintf_s (p: TBD)
-
- K.3.9.1.4 La fonction swprintf_s (p: TBD)
-
- K.3.9.1.13 La fonction wprintf_s (p: TBD)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.29.2.1 La fonction fwprintf (p: 403-410)
-
- 7.29.2.3 La fonction swprintf (p: 416)
-
- 7.29.2.11 La fonction wprintf (p: 421)
-
- K.3.9.1.1 La fonction fwprintf_s (p: 628)
-
- K.3.9.1.4 La fonction swprintf_s (p: 630-631)
-
- K.3.9.1.13 La fonction wprintf_s (p: 637-638)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.24.2.1 La fonction fwprintf (p : 349-356)
-
- 7.24.2.3 La fonction swprintf (p : 362)
-
- 7.24.2.11 La fonction wprintf (p : 366)
Voir aussi
|
(C99)
(C11)
(C11)
(C11)
(C11)
|
imprime une sortie formatée vers
stdout
, un flux de fichier ou un tampon
(fonction) |
|
(C95)
(C95)
(C95)
(C11)
(C11)
(C11)
(C11)
|
imprime une sortie de caractères larges formatée vers
stdout
, un flux de fichier
ou un tampon en utilisant une liste d'arguments variables (fonction) |
|
(C95)
|
écrit une chaîne large vers un flux de fichier
(fonction) |
|
Documentation C++
pour
wprintf
,
fwprintf
,
swprintf
|
|