vscanf, vfscanf, vsscanf, vscanf_s, vfscanf_s, vsscanf_s
| Défini dans l'en-tête <stdio.h>
|
||
int vscanf( const char* restrict format, va_list vlist );
|
(1) | (depuis C99) |
int vfscanf( FILE* restrict stream, const char* restrict format,
va_list vlist );
|
(2) | (depuis C99) |
int vsscanf( const char* restrict buffer, const char* restrict format,
va_list vlist );
|
(3) | (depuis C99) |
int vscanf_s(const char* restrict format, va_list vlist);
|
(4) | (depuis C11) |
int vfscanf_s( FILE* restrict stream, const char* restrict format,
va_list vlist);
|
(5) | (depuis C11) |
int vsscanf_s( const char* restrict buffer, const char* restrict format,
va_list vlist);
|
(6) | (depuis C11) |
Lit des données provenant de diverses sources, les interprète selon format et stocke les résultats dans des emplacements définis par vlist.
streambuffer. Atteindre la fin de la chaîne équivaut à atteindre la condition de fin de fichier pour fscanf%c, %s, et %[ les spécificateurs de conversion attendent chacun deux arguments (le pointeur habituel et une valeur de type rsize_t indiquant la taille du tableau de réception, qui peut être 1 lors de la lecture avec %c dans un seul char) et sauf que les erreurs suivantes sont détectées à l'exécution et appellent la fonction actuellement installée gestionnaire de contrainte :
- tout argument de type pointeur est un pointeur nul
format,stream, oubufferest un pointeur nul- le nombre de caractères qui serait écrit par %c, %s, ou %[, plus le caractère nul de terminaison, dépasserait le deuxième argument (rsize_t) fourni pour chacun de ces spécificateurs de conversion
- éventuellement, toute autre erreur détectable, comme un spécificateur de conversion inconnu
vscanf_s, vfscanf_s, et vsscanf_s ne sont garanties disponibles que si __STDC_LIB_EXT1__ est défini par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ comme la constante entière 1 avant d'inclure <stdio.h>.Paramètres
| stream | - | flux de fichier d'entrée à lire |
| buffer | - | pointeur vers une chaîne de caractères terminée par null à lire |
| format | - | pointeur vers une chaîne de caractères terminée par null spécifiant comment lire l'entrée |
| vlist | - | liste d'arguments variable contenant les arguments de réception. |
La chaîne format est composée de
- caractères multi-octets non blancs sauf
%: chaque tel caractère 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 du flux n'est pas égal. - caractères blancs : tout caractère blanc unique dans la chaîne de format consomme tous les caractères blancs consécutifs disponibles de l'entrée (déterminé comme si en appelant isspace dans une boucle). Notez qu'il n'y a pas de différence entre
"\n"," ","\t\t", ou tout autre blanc dans la chaîne de format. - spécifications de conversion. Chaque spécification de conversion a le format suivant :
- caractère d'introduction
%.
- caractère d'introduction
- (optionnel) caractère de suppression d'affectation
*. Si cette option est présente, la fonction n'affecte pas le résultat de la conversion à un argument de réception.
- (optionnel) caractère de suppression d'affectation
- (optionnel) nombre entier (supérieur à zéro) qui spécifie la largeur de champ maximale, 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 courante. Notez que
%set%[peuvent provoquer un débordement de tampon si la largeur n'est pas fournie.
- (optionnel) nombre entier (supérieur à zéro) qui spécifie la largeur de champ maximale, 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 courante. Notez que
- (optionnel) modificateur de longueur qui spécifie la taille de l'argument de réception, c'est-à-dire le type de destination réel. Cela affecte la précision de la conversion et les règles de débordement. Le type de destination par défaut est différent pour chaque type de conversion (voir tableau ci-dessous).
- spécificateur de format de conversion.
Les spécificateurs de format suivants sont disponibles :
| Conversion spécificateur |
Explication | Type d'argument attendu | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Modificateur de longueur→ | hh
|
h
|
aucun | l
|
ll
|
j
|
z
|
t
|
L
| |
| Disponible depuis C99 seulement→ | Oui | Oui | Oui | Oui | Oui | |||||
%
|
Correspond à
% 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 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* |
intmax_t* ou uintmax_t* |
size_t* |
ptrdiff_t* |
N/A |
b (C23)
|
Correspond à un entier binaire non signé.
| |||||||||
i
|
Correspond à un entier.
| |||||||||
u
|
Correspond à un entier décimal non signé.
| |||||||||
o
|
Correspond à un entier octal non signé.
| |||||||||
xX
|
Correspond à un entier hexadécimal non signé.
| |||||||||
n
|
Renvoie le nombre de caractères lus jusqu'à présent.
| |||||||||
a (C99)A (C99)eEfF (C99)gG
|
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 définissant un pointeur.
|
. | N/A | void** |
N/A | N/A | N/A | N/A | N/A | N/A |
| Notes | ||||||||||
|
Pour chaque spécificateur de conversion autre que Sauf pour le spécificateur Tous les spécificateurs de conversion autres que Les spécificateurs de conversion Les spécificateurs de conversion Les spécifications de conversion correctes pour les types d'entiers de largeur fixe (int8_t, etc.) sont définies dans l'en-tête <inttypes.h> (bien que SCNdMAX, SCNuMAX, etc. soient synonymes de 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 "puits". Lors de l'analyse d'une valeur à virgule flottante incomplète qui se termine par l'exposant sans chiffres, comme l'analyse de Si une spécification de conversion n'est pas valide, le comportement est indéfini. | ||||||||||
Valeur de retour
Notes
Toutes ces fonctions invoquent va_arg au moins une fois, la valeur de arg est indéterminée après le retour. Ces fonctions n'invoquent pas va_end, et cela doit être fait par l'appelant.
Exemple
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
bool checked_sscanf(int count, const char* buf, const char* fmt, ...)
{
va_list ap;
va_start(ap, fmt);
int rc = vsscanf(buf, fmt, ap);
va_end(ap);
return rc == count;
}
int main(void)
{
int n, m;
printf("Parsing '1 2'...");
if (checked_sscanf(2, "1 2", "%d %d", &n, &m))
puts("success");
else
puts("failure");
printf("Parsing '1 a'...");
if (checked_sscanf(2, "1 a", "%d %d", &n, &m))
puts("success");
else
puts("failure");
}
Sortie :
Parsing '1 2'...success
Parsing '1 a'...failure
Références
- Norme C23 (ISO/IEC 9899:2024) :
- 7.21.6.9 La fonction vfscanf (p : TBD)
- 7.21.6.11 La fonction vscanf (p : TBD)
- 7.21.6.14 La fonction vsscanf (p : TBD)
- K.3.5.3.9 La fonction vfscanf_s (p : TBD)
- K.3.5.3.11 La fonction vscanf_s (p : TBD)
- K.3.5.3.14 La fonction vsscanf_s (p : TBD)
- Norme C17 (ISO/IEC 9899:2018) :
- 7.21.6.9 La fonction vfscanf (p : TBD)
- 7.21.6.11 La fonction vscanf (p : TBD)
- 7.21.6.14 La fonction vsscanf (p : TBD)
- K.3.5.3.9 La fonction vfscanf_s (p : TBD)
- K.3.5.3.11 La fonction vscanf_s (p : TBD)
- K.3.5.3.14 La fonction vsscanf_s (p : TBD)
- Norme C11 (ISO/IEC 9899:2011) :
- 7.21.6.9 La fonction vfscanf (p : 327)
- 7.21.6.11 La fonction vscanf (p : 328)
- 7.21.6.14 La fonction vsscanf (p : 330)
- K.3.5.3.9 La fonction vfscanf_s (p : 597-598)
- K.3.5.3.11 La fonction vscanf_s (p : 599)
- K.3.5.3.14 La fonction vsscanf_s (p : 602)
- Norme C99 (ISO/IEC 9899:1999) :
- 7.19.6.9 La fonction vfscanf (p : 293)
- 7.19.6.11 La fonction vscanf (p : 294)
- 7.19.6.14 La fonction vsscanf (p : 295)
Voir aussi
(C11)(C11)(C11) |
lit l'entrée formatée depuis stdin, un flux de fichier ou un tampon (fonction) |
(C99)(C11)(C11)(C11)(C11) |
écrit la sortie formatée vers stdout, un flux de fichier ou un tampon en utilisant une liste d'arguments variable (fonction) |
Documentation C++ pour vscanf, vfscanf, vsscanf
| |