Partager via


vfscanf_s, vfwscanf_s

Lit les données mises en forme d’un flux. Ces versions de vfscanf, vfwscanf ont des améliorations de sécurité, comme décrit dans les fonctionnalités de sécurité du CRT.

Syntaxe

int vfscanf_s(
   FILE *stream,
   const char *format,
   va_list arglist
);
int vfwscanf_s(
   FILE *stream,
   const wchar_t *format,
   va_list arglist
);

Paramètres

stream
Pointeur vers la structure FILE .

format
Chaîne de contrôle de format.

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é. Si une erreur se produit ou si la fin du flux de fichier est atteinte avant la première conversion, la valeur de retour est EOF pour vfscanf_s et vfwscanf_s.

Ces fonctions valident leurs paramètres. S’il stream s’agit d’un pointeur de fichier non valide ou format s’il s’agit d’un pointeur null, ces fonctions appellent le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent EOF et définissent errno avec la valeur EINVAL.

Notes

La fonction vfscanf_s lit les données à partir de la position actuelle de stream aux emplacements fournis par liste d’arguments arglist éventuelle. 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. formatcontrôle l’interprétation des champs d’entrée et a la même forme et fonction que l’argument pour ; consultez les champs de spécification format : scanf et wscanf fonctions pour une description de format.scanf_sformat vfwscanf_s est une version à caractères larges de vfscanf_s. L’argument format pour vfwscanf_s est une chaîne de caractères larges. Ces fonctions se comportent de la même façon si le flux est ouvert en mode ANSI. vfscanf_s ne prend pas en charge actuellement les entrées à partir d'un flux UNICODE.

La principale différence entre les fonctions plus sécurisées (repérables au suffixe _s) et les autres est que les premières exigent la transmission de la taille en caractères de chaque champ de type c, C, s, S et [ en tant qu’argument de suite après la variable. Pour plus d’informations, consultez , , _wscanf_s_l _scanf_s_lwscanf_set scanf spécification de largeur.scanf_s

Remarque

Le paramètre relatif à la taille est de type unsigned, et non size_t.

Mappages de routines de texte générique

Routine TCHAR.H _UNICODE et _MBCS non définis _MBCS défini _UNICODE défini
_vftscanf_s vfscanf_s vfscanf_s vfwscanf_s

Spécifications

Fonction En-tête requis
vfscanf_s <stdio.h>
vfwscanf_s <stdio.h> ou <wchar.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_vfscanf_s.c
// compile with: /W3
// This program writes formatted
// data to a file. It then uses vfscanf_s to
// read the various data back from the file.

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

FILE *stream;

int call_vfscanf_s(FILE * istream, char * format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vfscanf_s(istream, format, arglist);
    va_end(arglist);
    return result;
}

int main(void)
{
    long l;
    float fp;
    char s[81];
    char c;

    if (fopen_s(&stream, "vfscanf_s.out", "w+") != 0)
    {
        printf("The file vfscanf_s.out was not opened\n");
    }
    else
    {
        fprintf(stream, "%s %ld %f%c", "a-string",
            65000, 3.14159, 'x');
        // Security caution!
        // Beware loading data from a file without confirming its size,
        // as it may lead to a buffer overrun situation.

        // Set pointer to beginning of file:
        fseek(stream, 0L, SEEK_SET);

        // Read data back from file:
        call_vfscanf_s(stream, "%s %ld %f%c", s, _countof(s), &l, &fp, &c, 1);

        // Output data read:
        printf("%s\n", s);
        printf("%ld\n", l);
        printf("%f\n", fp);
        printf("%c\n", c);

        fclose(stream);
    }
}
a-string
65000
3.141590
x

Voir aussi

E/S de flux
_cscanf_s, , _cscanf_s_l_cwscanf_s, ,_cwscanf_s_l
fprintf_s, , _fprintf_s_lfwprintf_s, ,_fwprintf_s_l
scanf_s, , _scanf_s_lwscanf_s, ,_wscanf_s_l
sscanf_s, , _sscanf_s_lswscanf_s, ,_swscanf_s_l
fscanf, , _fscanf_lfwscanf, ,_fwscanf_l
vfscanf, vfwscanf