vwscanf, vfwscanf, vswscanf, vwscanf_s, vfwscanf_s, vswscanf_s
|
Défini dans l'en-tête
<wchar.h>
|
||
|
int
vwscanf
(
const
wchar_t
*
restrict
format, va_list vlist
)
;
|
(1) | (depuis C99) |
|
int
vfwscanf
(
FILE
*
restrict
stream,
const wchar_t * restrict format, va_list vlist ) ; |
(2) | (depuis C99) |
|
int
vswscanf
(
const
wchar_t
*
restrict
buffer,
const wchar_t * restrict format, va_list vlist ) ; |
(3) | (depuis C99) |
|
int
vwscanf_s
(
const
wchar_t
*
restrict
format, va_list vlist
)
;
|
(4) | (depuis C11) |
|
int
vfwscanf_s
(
FILE
*
restrict
stream,
const wchar_t * restrict format, va_list vlist ) ; |
(5) | (depuis C11) |
|
int
vswscanf_s
(
const
wchar_t
*
restrict
buffer,
const wchar_t * restrict format, va_list vlist ) ; |
(6) | (depuis C11) |
Lit les données à partir de diverses sources, les interprète selon le
format
et stocke les résultats dans les emplacements définis par
vlist
.
stream
.
buffer
. Atteindre la fin de la chaîne équivaut à atteindre la condition de fin de fichier pour
fwscanf
-
- l'un des arguments de type pointeur est un pointeur nul
-
format,stream, oubufferest un pointeur nul - le nombre de caractères qui seraient écrits par %c, %s, ou %[, plus le caractère nul terminal, dépasserait le second argument (rsize_t) fourni pour chacun de ces spécificateurs de conversion
- optionnellement, toute autre erreur détectable, telle qu'un spécificateur de conversion inconnu
-
Comme pour toutes les fonctions à vérification des limites,
vwscanf_s,vfwscanf_s, etvswscanf_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 en entrée à lire |
| buffer | - | pointeur vers une chaîne large terminée par un caractère nul à lire |
| format | - | pointeur vers une chaîne large terminée par un caractère nul spécifiant comment lire l'entrée |
| vlist | - | liste d'arguments variables contenant les arguments de réception. |
La chaîne de
format
se compose de
- caractères larges non-blancs excepté % : chaque caractère de ce type dans la chaîne de format consomme exactement un caractère identique du flux d'entrée, ou provoque l'échec de la fonction si le caractère suivant dans le flux n'est pas égal.
- caractères d'espacement : tout caractère d'espacement unique dans la chaîne de format consomme tous les caractères d'espacement consécutifs disponibles en entrée (déterminés comme en appelant iswspace dans une boucle). Notez qu'il n'y a aucune différence entre " \n " , " " , " \t \t " , ou tout autre espacement dans la chaîne de format.
- spécifications de conversion. Chaque spécification de conversion a le format suivant :
-
- introductoire % caractère.
-
- (optionnel) caractère de suppression d'assignation * . Si cette option est présente, la fonction n'assigne pas le résultat de la conversion à aucun argument récepteur.
-
- (optionnel) nombre entier (supérieur à zéro) qui spécifie la largeur maximale du champ , c'est-à-dire le nombre maximum de caractères que la fonction est autorisée à consommer lors de la conversion spécifiée par la spécification de conversion actuelle. Notez que % s et % [ peuvent entraîner un dépassement de tampon si la largeur n'est pas fournie.
-
- (optionnel) modificateur de longueur qui spécifie la taille de l'argument récepteur, c'est-à-dire le type de destination réel. Cela affecte la précision de conversion et les règles de dépassement de capacité. Le type de destination par défaut est différent pour chaque type de conversion (voir le tableau ci-dessous).
-
- 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 | |||||
%
|
Correspond au caractère littéral
%
.
|
N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
Correspond à un caractère ou une séquence de caractères .
|
N/A | N/A |
char
*
|
wchar_t
*
|
N/A | N/A | N/A | N/A | N/A |
s
|
Correspond à une séquence de caractères non-blancs (une chaîne ).
|
|||||||||
[
set
]
|
Correspond à une séquence non vide de caractères de l'ensemble set de caractères.
|
|||||||||
d
|
Correspond à un entier décimal .
|
signed
char
*
ou
unsigned
char
*
|
signed
short
*
ou
unsigned
short
*
|
signed
int
*
ou
unsigned
int
*
|
signed
long
*
ou
unsigned
long
*
|
signed
long
long
*
ou
unsigned
long
long
*
|
size_t
*
|
N/A | ||
i
|
Correspond à un entier .
|
|||||||||
u
|
Correspond à un entier décimal non signé .
|
|||||||||
o
|
Correspond à un entier octal non signé .
|
|||||||||
x
X
|
Correspond à un entier hexadécimal non signé .
|
|||||||||
n
|
Retourne le nombre de caractères lus jusqu'à présent .
|
|||||||||
a
(C99)
A
(C99)
e
E
f
F
(C99)
g
G
|
Correspond à un nombre à virgule flottante .
|
N/A | N/A |
float
*
|
double
*
|
N/A | N/A | N/A | N/A |
long
double
*
|
p
|
Correspond à 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 | ||||||||||
|
Pour tout spécificateur de conversion autre que n , la séquence la plus longue de caractères d'entrée qui ne dépasse pas la largeur de champ spécifiée et qui correspond exactement à ce que le spécificateur de conversion attend ou est un préfixe d'une séquence qu'il attendrait, est ce qui est consommé depuis le flux. Le premier caractère, s'il existe, après cette séquence consommée reste non lu. Si la séquence consommée a une longueur nulle ou si la séquence consommée ne peut pas être convertie comme spécifié ci-dessus, un échec de correspondance se produit, sauf si la fin de fichier, une erreur d'encodage ou une erreur de lecture a empêché la lecture depuis le flux, auquel cas c'est un échec d'entrée. Tous les spécificateurs de conversion autres que [ , c , et n consomment et ignorent tous les caractères d'espacement initiaux (déterminés comme en appelant iswspace ) avant de tenter d'analyser l'entrée. Ces caractères consommés ne comptent pas dans la largeur de champ maximale spécifiée. Si le spécificateur de longueur l n'est pas utilisé, les spécificateurs de conversion c , s , et [ effectuent une conversion de caractères larges vers multioctets comme en appelant wcrtomb avec un objet mbstate_t initialisé à zéro avant la conversion du premier caractère. Les spécificateurs de conversion s et [ stockent toujours le terminateur nul en plus des caractères correspondants. La taille du tableau de destination doit être au moins supérieure d'un à la largeur de champ spécifiée. L'utilisation de % s ou % [ , sans spécifier la taille du tableau de destination, est aussi dangereuse que gets .
Les spécifications de conversion correctes pour les
types entiers de largeur fixe
(
int8_t
, etc.) sont définies dans l'en-tête
Il y a un point de séquence après l'action de chaque spécificateur de conversion ; cela permet de stocker plusieurs champs dans la même variable "réceptacle". Lors de l'analyse d'une valeur flottante incomplète se terminant par l'exposant sans chiffres, comme l'analyse de "100er" avec le spécificateur de conversion % f , la séquence "100e" (le plus long préfixe d'un nombre flottant potentiellement valide) est consommée, résultant en une erreur de correspondance (la séquence consommée ne peut pas être convertie en nombre flottant), avec "r" restant. Certaines implémentations existantes ne suivent pas cette règle et reviennent en arrière pour ne consommer que "100" , laissant "er" , par exemple, bogue glibc 1765 . Si une spécification de conversion est invalide, le comportement est indéfini. |
||||||||||
Valeur de retour
Notes
Toutes ces fonctions peuvent invoquer
va_arg
, la valeur de
arg
est indéterminée après le retour. Ces fonctions n'invoquent pas
va_end
, et cela doit être effectué par l'appelant.
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Références
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.29.2.6 La fonction vfwscanf (p: 418)
-
- 7.29.2.8 La fonction vswscanf (p: 419)
-
- 7.29.2.10 La fonction vwscanf (p: 420)
-
- K.3.9.1.7 La fonction vfwscanf_s (p: 632-633)
-
- K.3.9.1.10 La fonction vswscanf_s (p: 635-636)
-
- K.3.9.1.12 La fonction vwscanf_s (p: 637)
- Norme C99 (ISO/CEI 9899:1999) :
-
- 7.24.2.6 La fonction vfwscanf (p: 364)
-
- 7.24.2.8 La fonction vswscanf (p: 365)
-
- 7.24.2.10 La fonction vwscanf (p: 366)
Voir aussi
|
(C95)
(C95)
(C95)
(C11)
(C11)
(C11)
|
lit une entrée de caractères larges formatée depuis
stdin
, un flux de fichier ou un tampon
(fonction) |
|
Documentation C++
pour
vwscanf
,
vfwscanf
,
vswscanf
|
|