vscanf_s
, vwscanf_s
Lit les données mises en forme du flux d'entrée standard. Ces versions ont des améliorations de vscanf
vwscanf
sécurité, comme décrit dans les fonctionnalités de sécurité du CRT.
Syntaxe
int vscanf_s(
const char *format,
va_list arglist
);
int vwscanf_s(
const wchar_t *format,
va_list arglist
);
Paramètres
format
Format de la chaîne de contrôle.
arglist
Liste d’arguments de variable.
Valeur retournée
Retourne le nombre de champs correctement convertis et affectés ; la valeur de retour n’inclut pas les champs qui ont été lus mais qui n’ont pas été affectés. La valeur de retour 0 indique qu'aucun champ n'a été assigné. La valeur de retour est EOF
si une erreur est détectée, ou si le caractère de fin de fichier ou le caractère de fin de chaîne est rencontré durant la première tentative de lecture d'un caractère. S’il format
s’agit d’un NULL
pointeur, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à continuer, vscanf_s
et vwscanf_s
retournent EOF
et définissent errno
à EINVAL
.
Pour plus d’informations sur ces codes d’erreur et d’autres codes d’erreur, consultez , , _sys_errlist
_doserrno
et _sys_nerr
.errno
Notes
La fonction vscanf_s
lit les données du flux d’entrée standard stdin
et les écrit aux emplacements indiqués par la liste d’arguments arglist
. Chaque argument de la liste doit être un pointeur désignant une variable d’un type qui correspond à un spécificateur de type dans format
. Si une copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.
vwscanf_s
est une version à caractères larges de vscanf_s
; l'argument format
de vwscanf_s
est une chaîne à caractères larges. vwscanf_s
et vscanf_s
se comportent de la même façon si le flux est ouvert en mode ANSI. vscanf_s
ne prend pas en charge l’entrée d’un flux UNICODE.
Contrairement vscanf
à et vwscanf
, vscanf_s
et vwscanf_s
exiger que la taille de la mémoire tampon soit spécifiée pour tous les paramètres d’entrée de type c, C, s, S ou jeux de contrôles de chaîne inclus dans []. La taille de la mémoire tampon en caractères est passée en tant que autre paramètre immédiatement après le pointeur vers la mémoire tampon ou la variable. La taille de la mémoire tampon en caractères d’une wchar_t
chaîne n’est pas la même que la taille en octets.
La taille de la mémoire tampon inclut le caractère Null de fin. Vous pouvez utiliser un champ de spécification de largeur pour être certain que le jeton lu tiendra dans la mémoire tampon. Si aucun champ de spécification de largeur n’est utilisé et que le jeton lu est trop grand pour s’adapter à la mémoire tampon, rien n’est écrit dans cette mémoire tampon.
Remarque
Le size
paramètre est de type unsigned
, et non size_t
.
Pour plus d’informations, consultez Spécification de largeur scanf.
Mappages de routines de texte générique
Routine TCHAR.H | _UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_vtscanf_s |
vscanf_s |
vscanf_s |
vwscanf_s |
Pour plus d’informations, consultez Champs de spécification de format : scanf
et wscanf
fonctions.
Spécifications
Routine | En-tête requis |
---|---|
vscanf_s |
<stdio.h> |
wscanf_s |
<stdio.h> ou <wchar.h> |
La console n’est pas prise en charge dans les applications de la plateforme Windows universelle (UWP). Les handles de flux standard associés à la console (stdin
, stdout
et stderr
) doivent être redirigés pour que les fonctions de runtime C puissent les utiliser dans les applications UWP. Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// crt_vscanf_s.c
// compile with: /W3
// This program uses the vscanf_s and vwscanf_s functions
// to read formatted input.
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
int call_vscanf_s(char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vscanf_s(format, arglist);
va_end(arglist);
return result;
}
int call_vwscanf_s(wchar_t *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vwscanf_s(format, arglist);
va_end(arglist);
return result;
}
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = call_vscanf_s("%d %f %c %C %s %S", &i, &fp, &c, 1,
&wc, 1, s, _countof(s), ws, _countof(ws) );
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
result = call_vwscanf_s(L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
&wc, 1, s, _countof(s), ws, _countof(ws) );
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
Quand l’entrée de l’exemple est communiquée à ce programme, il génère cette sortie :
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters
Voir aussi
Prise en charge des fonctions mathématiques et à virgule flottante
E/S de flux
Paramètres régionaux
printf
, , _printf_l
wprintf
, ,_wprintf_l
scanf
, , _scanf_l
wscanf
, ,_wscanf_l
scanf_s
, , _scanf_s_l
wscanf_s
, ,_wscanf_s_l
vscanf
, vwscanf