Partilhar via


vfscanf_s, vfwscanf_s

Lê dados formatados de um fluxo. Essas versões do vfscanf, vfwscanf têm aprimoramentos de segurança, conforme descrito em Recursos de segurança na CRT.

Sintaxe

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
Ponteiro para a estrutura FILE.

format
Cadeia de caracteres de controle de formato.

arglist
Lista de argumentos variáveis.

Retornar valor

Cada uma dessas funções retorna o número de campos que são convertidos e atribuídos com êxito. O valor retornado não inclui campos que foram lidos, mas não atribuídos. Um valor retornado igual a 0 indica que nenhum campo foi atribuído. Se ocorrer um erro ou se o final do fluxo de arquivo for atingido antes da primeira conversão, o valor retornado será EOF para vfscanf_s e vfwscanf_s.

Essas funções validam seus parâmetros. Se stream for um ponteiro de arquivo inválido ou format for um ponteiro nulo, essas funções invocarão o manipulador de parâmetros inválido, conforme descrito em Validação de parâmetro. Se a execução puder continuar, essas funções retornarão EOF e definirão errno para EINVAL.

Comentários

A função vfscanf_s lê dados da posição atual de stream nos locais fornecidos por arglist (se houver). Cada argumento na lista deve ser um ponteiro para uma variável de um tipo que corresponde a um especificador de tipo em format. formatcontrola a interpretação dos campos de entrada e tem a mesma forma e função que o format argumento para ; consulte Formatar campos de especificação: scanf e wscanf funções para scanf_sobter uma descrição do format. vfwscanf_s é uma versão de caractere largo de vfscanf_s; o argumento de formato para vfwscanf_s é uma cadeia de caracteres largos. Essas funções terão comportamento idêntico se o fluxo for aberto no modo ANSI. Atualmente, vfscanf_s não dá suporte à entrada de um fluxo UNICODE.

A principal diferença entre as funções mais seguras (que têm o sufixo _s) e as outras versões é que as funções mais seguras exigem que o tamanho em caracteres de cada campo de tipo c, C, s, S e [ seja passado como um argumento imediatamente após a variável. Para obter mais informações, consulte scanf_s, _scanf_s_l, _wscanf_s_lwscanf_s e scanf especificação de largura.

Observação

O parâmetro de tamanho é do tipo unsigned, não size_t.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_vftscanf_s vfscanf_s vfscanf_s vfwscanf_s

Requisitos

Função Cabeçalho necessário
vfscanf_s <stdio.h>
vfwscanf_s <stdio.h> ou <wchar.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

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

Confira também

E/S de fluxo
_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