Share via


fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l

Legge i dati formattati da un flusso. Queste versioni di fscanf, _fscanf_lfwscanf, , _fwscanf_l includono miglioramenti della sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Sintassi

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 ]...
);

Parametri

stream
Puntatore alla struttura FILE .

format
Stringa di controllo del formato.

argument
Argomenti facoltativi.

locale
Impostazioni locali da usare.

Valore restituito

Ognuna di queste funzioni restituisce il numero di campi che converte e assegna correttamente. Il valore restituito non include i campi letti ma non assegnati. Un valore restituito pari a 0 indica che nessun campo è stato assegnato. In caso di errore o se viene raggiunta la fine del flusso di file prima della prima conversione, il valore restituito è EOF per fscanf_s e fwscanf_s.

Queste funzioni convalidano i relativi parametri. Se stream è un puntatore di file non valido o format è un puntatore Null, queste funzioni richiamano il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono EOF e impostano errno su EINVAL.

Osservazioni:

La funzione fscanf_s legge i dati dalla posizione corrente di stream nelle posizioni specificate da argument (se presenti). Ogni argument deve essere un puntatore a una variabile di un tipo che corrisponde a un identificatore di tipo in format. formatcontrolla l'interpretazione dei campi di input e ha la stessa forma e la stessa funzione dell'argomento per . Vedere Campi di specifica del formato: scanf e wscanf funzioni per una descrizione di format.scanf_sformat fwscanf_s è una versione a caratteri wide di fscanf_s. L'argomento del formato per fwscanf_s è una stringa di caratteri wide. Queste funzioni si comportano in modo identico se il flusso viene aperto in modalità ANSI. fscanf_s non supporta attualmente l'input da un flusso UNICODE.

La differenza principale tra le funzioni più sicure (con il suffisso _s) e le altre versioni è che le funzioni più sicure richiedono il passaggio delle dimensioni in caratteri per ogni c, C, s, S e del campo del tipo [ come argomento subito dopo la variabile. Per altre informazioni, vedere Specifica di larghezza , _scanf_s_lwscanf_s,_wscanf_s_le scanf .scanf_s

Nota

Il parametro di dimensione è di tipo unsigned non size_t.

Le versioni di queste funzioni con il suffisso _l sono identiche, ad eccezione del fatto che utilizzano il parametro delle impostazioni locali passato al posto delle impostazioni locali del thread corrente.

Mapping di routine di testo generico

TCHAR.H Routine _UNICODE e _MBCS non definito _MBCS Definito _UNICODE Definito
_ftscanf_s fscanf_s fscanf_s fwscanf_s
_ftscanf_s_l _fscanf_s_l _fscanf_s_l _fwscanf_s_l

Requisiti

Funzione Intestazione obbligatoria
fscanf_s, _fscanf_s_l <stdio.h>
fwscanf_s, _fwscanf_s_l <stdio.h> oppure <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

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

Vedi anche

I/O di flusso
_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