fscanf_s
, _fscanf_s_l
, fwscanf_s
, _fwscanf_s_l
Lê dados formatados de um fluxo. Essas versões dofscanf
, _fscanf_l
, fwscanf
têm _fwscanf_l
aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
Sintaxe
int fscanf_s(
FILE *stream,
const char *format [,
argument ]...
);
int _fscanf_s_l(
FILE *stream,
const char *format,
_locale_t locale [,
argument ]...
);
int fwscanf_s(
FILE *stream,
const wchar_t *format [,
argument ]...
);
int _fwscanf_s_l(
FILE *stream,
const wchar_t *format,
_locale_t locale [,
argument ]...
);
Parâmetros
stream
Ponteiro para a estrutura FILE
.
format
Cadeia de caracteres de controle de formato.
argument
Argumentos opcionais.
locale
A localidade a ser usada.
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 fscanf_s
e fwscanf_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 um 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 fscanf_s
lê dados da posição atual de stream
nos locais fornecidos por argument
(se houver). Cada argument
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 scanf_s
dos campos de entrada e tem a mesma forma e função que o argumento de formato para ; consulte Format Specification Fields: scanf and wscanf Functions para ver uma descrição do formato. fwscanf_s
é uma versão de caractere largo de fscanf_s
; o argumento de formato para fwscanf_s
é uma cadeia de caracteres largos. Essas funções terão comportamento idêntico se o fluxo for aberto no modo ANSI. Atualmente, fscanf_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, consultescanf_s
, _scanf_s_l
, wscanf_s
e _wscanf_s_l
Especificação scanf
de largura.
Observação
O parâmetro de tamanho é do tipo unsigned
, não size_t
.
As versões dessas funções que têm o sufixo _l
são idênticas, exceto por usarem o parâmetro de localidade que é informado em vez da localidade do thread atual.
Mapeamentos da rotina de texto genérico
TCHAR.H Rotina |
_UNICODE &_MBCS não definido |
_MBCS Definido |
_UNICODE Definido |
---|---|---|---|
_ftscanf_s |
fscanf_s |
fscanf_s |
fwscanf_s |
_ftscanf_s_l |
_fscanf_s_l |
_fscanf_s_l |
_fwscanf_s_l |
Requisitos
Função | Cabeçalho necessário |
---|---|
fscanf_s , _fscanf_s_l |
<stdio.h> |
fwscanf_s , _fwscanf_s_l |
<stdio.h> ou <wchar.h> |
Para obter mais informações sobre compatibilidade, consulte Compatibilidade.
Exemplo
// crt_fscanf_s.c
// This program writes formatted
// data to a file. It then uses fscanf to
// read the various data back from the file.
#include <stdio.h>
#include <stdlib.h>
FILE *stream;
int main( void )
{
long l;
float fp;
char s[81];
char c;
errno_t err = fopen_s( &stream, "fscanf.out", "w+" );
if( err )
printf_s( "The file fscanf.out was not opened\n" );
else
{
fprintf_s( stream, "%s %ld %f%c", "a-string",
65000, 3.14159, 'x' );
// Set pointer to beginning of file:
fseek( stream, 0L, SEEK_SET );
// Read data back from file:
fscanf_s( stream, "%s", s, _countof(s) );
fscanf_s( stream, "%ld", &l );
fscanf_s( stream, "%f", &fp );
fscanf_s( stream, "%c", &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