wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
| Définie dans l'en-tête <wchar.h>
|
||
int wprintf( const wchar_t* format, ... );
|
(1) | (depuis C95) (jusqu'à C99) |
int wprintf( const wchar_t* restrict format, ... );
|
(depuis C99) | |
int fwprintf( FILE* stream, const wchar_t* format, ... );
|
(2) | (depuis C95) (jusqu'à C99) |
int fwprintf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(depuis C99) | |
int swprintf( wchar_t* buffer, size_t bufsz,
const wchar_t* format, ... );
|
(3) | (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 depuis les emplacements donnés, les convertit en chaînes larges équivalentes et écrit les résultats dans diverses destinations.
stream.bufsz est supérieur à zéro, écrit les résultats dans une chaîne large buffer. Au maximum bufsz - 1 caractères larges sont écrits, suivis du caractère large nul. Si bufsz est zéro, rien n'est écrit (et buffer peut être un pointeur nul).- le spécificateur de conversion
%nest présent dansformat - l'un des arguments correspondant à
%sest un pointeur nul formatoubufferest un pointeur nulbufszest zéro ou supérieur àRSIZE_MAX / sizeof(wchar_t)- des erreurs d'encodage se produisent dans les spécificateurs de conversion de chaîne et de caractère
- (uniquement pour
swprintf_s) le nombre de caractères larges à écrire, y compris le nul, dépasseraitbufsz.
s.wprintf_s, fwprintf_s, swprintf_s, et snwprintf_s ne 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__ par la constante entière 1 avant d'inclure <stdio.h>.Paramètres
| stream | - | flux de fichier de sortie vers lequel écrire |
| buffer | - | pointeur vers une chaîne de caractères larges dans laquelle écrire |
| bufsz | - | au plus 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 les 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 supplémentaires sont évalués et ignorés.
|
La chaîne format se compose de caractères larges ordinaires (sauf %), qui sont copiés inchangés dans le flux de sortie, et de spécifications de conversion. Chaque spécification de conversion a le format suivant :
- Caractère introductif
%.
- Caractère introductif
- (optionnel) un ou plusieurs drapeaux qui modifient le comportement de la conversion :
-: le résultat de la conversion est aligné à gauche dans le champ (par défaut il est aligné à droite).+: le signe des conversions signées est toujours préfixé au résultat de la conversion (par défaut le résultat n'est précédé d'un moins que 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 préfixé au résultat. Il est ignoré si le drapeau
+est présent. #: une 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 d'entiers et de nombres à virgule flottante, des zéros non significatifs sont utilisés pour remplir le champ au lieu de 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 rempli avec des caractères espace (par défaut), si nécessaire, à gauche lorsqu'il est aligné à droite, ou à droite s'il est aligné à gauche. Dans le cas où*est utilisé, la largeur est spécifiée par un argument supplémentaire de typeint, qui apparaît avant l'argument à convertir et l'argument fournissant la précision si elle est fournie. Si la valeur de l'argument est négative, cela résulte en la spécification du drapeau-et une largeur de champ positive (Remarque : il s'agit de la largeur minimale : la valeur n'est jamais tronquée).
- (optionnel) valeur entière ou
- (optionnel)
.suivi d'un nombre entier ou de*, 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 typeint, qui apparaît avant l'argument à convertir, mais après l'argument fournissant la largeur minimale du champ s'il 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 considérée comme nulle. 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 | |
| Disponible uniquement depuis C99→ | Oui | Oui | Oui | Oui | Oui | |||||
%
|
Écrit littéralement %. 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 |
di
|
Convertit un entier signé en représentation décimale [-]dddd.
|
signed char |
short |
int |
long |
long long |
intmax_t |
※ |
ptrdiff_t |
N/A |
bB (optionnel)
(C23) |
Convertit un entier non signé en représentation binaire bbbb.
|
unsigned char |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
uintmax_t |
size_t |
version non signée de ptrdiff_t |
N/A |
o
|
Convertit un entier non signé en représentation octale oooo.
|
N/A | ||||||||
xX
|
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 | ||||||||
fF (C99)
|
Convertit un nombre à virgule flottante en notation décimale du style [-]ddd.ddd.
|
N/A | N/A | double |
double (C99) |
N/A | N/A | N/A | N/A | long double |
eE
|
Convertit un nombre à virgule flottante en notation exponentielle décimale.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
aA
(C99) |
Convertit un nombre à virgule flottante en notation exponentielle hexadécimale.
|
N/A | N/A | N/A | N/A | N/A | N/A | |||
gG
|
Convertit un nombre à virgule flottante en notation décimale ou 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 à la fonction.
|
signed char* |
short* |
int* |
long* |
long long* |
intmax_t * |
※ |
ptrdiff_t * |
N/A |
p
|
Écrit une séquence de caractères définie par l'implémentation décrivant 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 Pas-un-nombre (NaN) est converti en Les conversions Le spécificateur de conversion utilisé pour afficher Les spécifications de conversion correctes pour les types de caractères à 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
bufsz (y compris lorsque bufsz est zéro).buffer. Retourne une valeur négative en cas d'erreurs d'encodage et de dépassement. Retourne zéro pour toutes les autres erreurs.buffer si bufsz avait été suffisamment grand, ou une valeur négative si une erreur se produit. (Cela signifie que l'écriture est réussie et complète seulement si la valeur de retour est non négative et inférieure à bufsz)Notes
Alors que les chaînes étroites fournissent snprintf, qui permet de déterminer la taille du tampon de sortie nécessaire, il n'existe pas d'équivalent pour les chaînes larges (jusqu'à snwprintf_s)(depuis C11), et pour déterminer la taille du tampon, le programme peut avoir besoin d'appeler swprintf, de vérifier la valeur de retour, de réallouer un tampon plus grand, et de réessayer jusqu'à réussite.
snwprintf_s, contrairement à swprintf_s, tronquera le résultat pour qu'il tienne dans le tableau pointé par buffer, même si la troncature est traitée comme une erreur par la plupart des fonctions vérifiées aux 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/IEC 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/IEC 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/IEC 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/IEC 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) |
affiche la sortie formatée vers stdout, un flux de fichier ou un tampon (fonction) |
(C95)(C95)(C95)(C11)(C11)(C11)(C11) |
affiche la sortie formatée de caractères larges vers stdout, un flux de fichier ou un tampon en utilisant une liste d'arguments variables (fonction) |
(C95) |
écrit une chaîne de caractères larges dans un flux de fichier (fonction) |
Documentation C++ pour wprintf, fwprintf, swprintf
| |