Partager via


vsscanf_s, vswscanf_s

Lit les données mises en forme d’une chaîne. Ces versions ont des améliorations de vsscanf vswscanfsé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_doserrnoet _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 vsscanfmoins 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_set 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_lwscanf, ,_wscanf_l
sscanf, , _sscanf_lswscanf, ,_swscanf_l
sscanf_s, , _sscanf_s_lswscanf_s, ,_swscanf_s_l
sprintf, , _sprintf_lswprintf, , _swprintf_l__swprintf_l
vsscanf, vswscanf