Compartir a través de


vfscanf_s, vfwscanf_s

Lee datos con formato de un flujo. Estas versiones de vfscanf, vfwscanf tienen mejoras de seguridad, como se describe en Características de seguridad de CRT.

Sintaxis

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

Parámetros

stream
Puntero a la estructura FILE .

format
Cadena de control de formato.

arglist
Lista de argumentos de variable.

Valor devuelto

Cada una de estas funciones devuelve el número de campos que se convierten y asignan correctamente. El valor devuelto no incluye los campos que se han leído pero no se han asignado. Un valor devuelto de 0 indica que no se ha asignado ningún campo. Si se produce un error, o si se llega al final del flujo de archivo antes de la primera conversión, el valor devuelto es EOF para vfscanf_s y vfwscanf_s.

Estas funciones validan sus parámetros. Si stream es un puntero de archivo no válido o format es un puntero nulo, estas funciones invocan al controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones devuelven EOF y establecen errno en EINVAL.

Comentarios

La función vfscanf_s lee datos de la posición actual de stream en las ubicaciones que proporciona la lista de argumentos arglist (si las hubiera). Cada argumento de la lista debe ser un puntero a una variable de un tipo que se corresponda con un especificador de tipo en format. format controla la interpretación de los campos de entrada y tiene la misma forma y función que el format argumento para scanf_s; vea Formato de campos de especificación: scanf y wscanf funciones para obtener una descripción de format. vfwscanf_s es una versión con caracteres anchos de vfscanf_s; el argumento de formato para vfwscanf_s es una cadena de caracteres anchos. Estas funciones se comportan igual si el flujo se abre en modo ANSI. vfscanf_s no admite actualmente la entrada desde un flujo UNICODE.

La diferencia principal entre las funciones más seguras (que tienen el sufijo _s) y las demás versiones es que las funciones más seguras requieren el tamaño en caracteres de cada c, C, s, S y el campo de tipo [ que se va a pasar como argumento inmediatamente después de la variable. Para obtener más información, vea especificación de ancho , _scanf_s_l, _wscanf_s_lwscanf_sy .scanfscanf_s

Nota:

El parámetro de tamaño es del tipo unsigned, no size_t.

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_vftscanf_s vfscanf_s vfscanf_s vfwscanf_s

Requisitos

Función Encabezado necesario
vfscanf_s <stdio.h>
vfwscanf_s <stdio.h> o <wchar.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

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

Vea también

E/S de secuencia
_cscanf_s, _cscanf_s_l, , _cwscanf_s, _cwscanf_s_l
fprintf_s, _fprintf_s_l, , fwprintf_s, _fwprintf_s_l
scanf_s, _scanf_s_l, , wscanf_s, _wscanf_s_l
sscanf_s, _sscanf_s_l, , swscanf_s, _swscanf_s_l
fscanf, _fscanf_l, , fwscanf, _fwscanf_l
vfscanf, vfwscanf