Exporter (0) Imprimer
Développer tout
and
div
eof
not
or
xor
Développer Réduire
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

vfscanf_s, vfwscanf_s

Visual Studio 2013

Lit les données mises en forme à partir d'un flux. Ces versions de vfscanf, vfwscanf présentent des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le CRT.

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

stream

Pointeur vers la structure FILE.

format

Chaîne de contrôle de format.

arglist

Liste d'arguments variable.

Chacune de ces fonctions retourne le nombre de champs qui sont correctement convertis et assignés ; la valeur de retour n'inclut pas les champs qui ont été lus mais non assigné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 fichiers 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. Si stream est un pointeur de fichier valide ou format est un pointeur null, ces fonctions appelleront le gestionnaire de paramètres non valide, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent EOF et définissent errno avec la valeur EINVAL.

La fonction vfscanf_s lit les données à partir de la position actuelle de stream dans les emplacements fournis par la liste d'arguments arglist (le cas échéant). Chaque argument de la liste doit être un pointeur vers une variable dont le type correspond à un spécificateur de type dans format. format contrôle l'interprétation des champs d'entrée et a le même formulaire et la même fonction que l'argument format pour scanf_s ; consultez Champs de spécification de format : fonctions scanf et wscanf pour une description de format. vfwscanf_s est une version à caractères larges de vfscanf_s ; l'argument de format de vfwscanf_s est une chaîne à 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 actuellement pas en charge la saisie à partir d'un flux d'UNICODE.

La principale différence entre les fonctions plus sécurisées (qui disposent du suffixe _s ) et les autres versions réside dans le fait que les fonctions plus sécurisées requièrent que la taille en caractères de chaque type de champ c, C, s, S et [ soit passée comme argument immédiatement après la variable. Pour plus d’informations, consultez scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l et Spécification de largeur scanf.

Remarque Remarque

Le paramètre size est de type unsigned, et non du type size_t.

Mappages de routines de texte générique

Routine TCHAR.H

_UNICODE & _MBCS non définis

_MBCS défini

_UNICODE défini

_vftscanf_s

vfscanf_s

vfscanf_s

vfwscanf_s

Function

En-tête requis

vfscanf_s

<stdio.h>

vfwscanf_s

<stdio.h> ou <wchar.h>

Pour plus d'informations sur la compatibilité, consultez Compatibilité.

// 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

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft