fscanf_s, _fscanf_s_l, fwscanf_s, _fwscanf_s_l
Legge i dati formattati da un flusso. Queste versioni di fscanf, _fscanf_l, fwscanf, _fwscanf_l contengono i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in CRT.
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 utilizzare.
Valore restituito
Ognuna di queste funzioni restituisce il numero di campi che vengono convertiti correttamente e assegnati; il valore restituito non include i campi che sono stati letti ma non assegnati. Un valore restituito pari a 0 indica che nessun campo è stato assegnato. Se si verifica un errore, o se la fine del flusso di file viene raggiunta prima della prima conversione, il valore restituito è EOF per fscanf_s e fwscanf_s.
Queste funzioni convalidano i parametri. Se stream è un puntatore file non valido o format è un puntatore null, queste funzioni richiamano il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono EOF e impostano errno su EINVAL.
Note
La funzione fscanf_s legge i dati dalla posizione corrente di stream nelle locazioni fornite date da argument (se presenti). Ogni argument deve essere un puntatore a una variabile di un tipo che corrisponde a un tipo specificato in format. format controlla l'interpretazione dei campi di input e ha lo stesso form e funziona come l'argomento format per scanf_s; vedere Campi per la specifica di formato: funzioni scanf e wscanf per una descrizione di format. fwscanf_s è una versione a caratteri estesi di fscanf_s; l'argomento format in fwscanf_s è una stringa a caratteri estesi. Queste funzioni si comportano in modo identico se il flusso viene aperto in modalità ANSI. fscanf_s attualmente non supporta l'input da un flusso di UNICODE.
La differenza principale tra più funzioni protette (che abbiano il suffisso _s) e le altre versioni è che le funzioni più protette richiedono la dimensione dei caratteri di ogni c, C, s, Se del campo di tipo [ da essere passato come un argomento immediatamente dopo la variabile. Per ulteriori informazioni, vedere scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l e Specifica della larghezza per scanf.
Nota
Il parametro di dimensione è di tipo unsigned, non size_t.
Le versioni di queste funzioni che hanno il suffisso _l sono identiche ad eccezione del fatto che utilizzano il parametro delle impostazioni locali che viene passato al posto di quelle della thread corrente.
Mapping di routine su testo generico
Routine TCHAR.H |
_UNICODE & _MBCS non definiti |
_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> o <wchar.h> |
Per ulteriori informazioni sulla compatibilità, vedere 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 );
}
}
Equivalente .NET Framework
System::IO::StreamReader::ReadLine. Vedere anche i metodi Parse, come System::Double::Parse.
Vedere anche
Riferimenti
_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