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 no 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.
Valor retornado
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âmetro 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
. format
controla a interpretação dos campos de entrada e tem a mesma forma e função que o format
argumento para scanf_s
; consulte Campos de especificação de formato: scanf
e wscanf
funções para obter uma descrição de 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
e scanf
_wscanf_s_l
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