vsscanf_s
, vswscanf_s
Lit les données mises en forme d’une chaîne. Ces versions ont des améliorations de vsscanf
vswscanf
sécurité, comme décrit dans les fonctionnalités de sécurité du CRT.
Syntaxe
int vsscanf_s(
const char *buffer,
const char *format,
va_list argptr
);
int vswscanf_s(
const wchar_t *buffer,
const wchar_t *format,
va_list arglist
);
Paramètres
buffer
Données stockées
format
Chaîne de contrôle de format. Pour plus d’informations, consultez Champs de spécification de format : scanf
et wscanf
fonctions.
arglist
Liste d’arguments de variable.
Valeur retournée
Chacune de ces fonctions retourne le nombre de champs qui sont 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
en cas d’erreur ou si la fin de la chaîne est atteinte avant la première conversion.
Si buffer
ou format
est 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 à se poursuivre, ces fonctions retournent -1 et définissent errno
avec la valeur 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 vsscanf_s
lit les données de buffer
dans les emplacements fournis par chaque argument figurant dans la liste d’arguments arglist
. Les arguments présents dans la liste d’arguments spécifient des pointeurs désignant des variables dont le type correspond à un spécificateur de type dans format
. Contrairement à la version vsscanf
moins sécurisée, un paramètre de taille de mémoire tampon est requis lorsque vous utilisez les types de champs c, C, s, S ou jeux de contrôle de chaîne inclus dans []. La taille de la mémoire tampon en caractères doit être fournie en tant que autre paramètre immédiatement après chaque paramètre de mémoire tampon qui l’exige.
La taille de la mémoire tampon inclut le caractère Null de fin. Un champ de spécification de largeur peut être utilisé pour faire en sorte 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.
Pour plus d’informations, consultez , , _wscanf_s_l
_scanf_s_l
wscanf_s
et scanf Type Field Characters.scanf_s
Remarque
Le paramètre relatif à la taille est de type unsigned
, et non size_t
.
L’argument format
contrôle l’interprétation des champs d’entrée et a les mêmes forme et fonction que l’argument format
de la fonction scanf_s
. Si une copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.
vswscanf_s
est une version à caractères larges de vsscanf_s
; les arguments de vswscanf_s
sont des chaînes à caractères larges. vsscanf_s
ne gère pas les caractères hexadécimaux multioctets. vswscanf_s
ne gère pas les caractères hexadécimaux hexadécimaux ou « zone de compatibilité » Unicode. Sinon, vswscanf_s
et vsscanf_s
se comportent de la même façon.
Mappages de routines de texte générique
Routine TCHAR.H | _UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_vstscanf_s |
vsscanf_s |
vsscanf_s |
vswscanf_s |
Spécifications
Routine | En-tête requis |
---|---|
vsscanf_s |
<stdio.h> |
vswscanf_s |
<stdio.h> ou <wchar.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// crt_vsscanf_s.c
// compile with: /W3
// This program uses vsscanf_s to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
int call_vsscanf_s(char *tokenstring, char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vsscanf_s(tokenstring, format, arglist);
va_end(arglist);
return result;
}
int main( void )
{
char tokenstring[] = "15 12 14...";
char s[81];
char c;
int i;
float fp;
// Input various data from tokenstring:
// max 80 character string:
call_vsscanf_s(tokenstring, "%80s", s, _countof(s));
call_vsscanf_s(tokenstring, "%c", &c, sizeof(char));
call_vsscanf_s(tokenstring, "%d", &i);
call_vsscanf_s(tokenstring, "%f", &fp);
// Output the data read
printf("String = %s\n", s);
printf("Character = %c\n", c);
printf("Integer: = %d\n", i);
printf("Real: = %f\n", fp);
}
String = 15
Character = 1
Integer: = 15
Real: = 15.000000
Voir aussi
E/S de flux
scanf
, , _scanf_l
wscanf
, ,_wscanf_l
sscanf
, , _sscanf_l
swscanf
, ,_swscanf_l
sscanf_s
, , _sscanf_s_l
swscanf_s
, ,_swscanf_s_l
sprintf
, , _sprintf_l
swprintf
, , _swprintf_l
__swprintf_l
vsscanf
, vswscanf