fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l

Lê dados formatados de um fluxo. Essas versões dofscanf , _fscanf_l, fwscanftê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. formatcontrola a interpretação scanf_sdos 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_se _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