sscanf
, _sscanf_l
, swscanf
_swscanf_l
Legge i dati formattati da una stringa. Sono disponibili versioni più sicure di queste funzioni; vedere sscanf_s
, _sscanf_s_l
, swscanf_s
, _swscanf_s_l
.
Sintassi
int sscanf(
const char *buffer,
const char *format [,
argument ] ...
);
int _sscanf_l(
const char *buffer,
const char *format,
_locale_t locale [,
argument ] ...
);
int swscanf(
const wchar_t *buffer,
const wchar_t *format [,
argument ] ...
);
int _swscanf_l(
const wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument ] ...
);
Parametri
buffer
Dati archiviati
format
Stringa di controllo del formato. Per altre informazioni, vedere Sintassi delle specifiche di formato.
argument
Argomenti facoltativi
locale
Impostazioni locali da usare
Valore restituito
Ognuna di queste funzioni restituisce il numero di campi convertiti e assegnati correttamente; Il valore restituito non include campi letti ma non assegnati. Un valore restituito pari a 0 indica che nessun campo è stato assegnato. Il valore restituito è EOF
in caso di errore o se viene raggiunta la fine della stringa prima della prima conversione.
Se buffer
o format
è un NULL
puntatore, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono -1 e impostano errno
su EINVAL
.
Per informazioni su questi e altri codici di errore, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Osservazioni:
La funzione sscanf
legge i dati da buffer
nella posizione specificata da ogni argument
. Ogni argument
deve essere un puntatore a una variabile con un tipo corrispondente a un identificatore di tipo in format
. L'argomento format
controlla l'interpretazione dei campi di input e ha lo stesso formato e la stessa funzione dell'argomento format
per la funzione scanf
. Se la copia avviene tra stringhe che si sovrappongono, il comportamento non è definito.
Per informazioni sui caratteri di campo di tipo scanf, vedere scanf
Digitare i caratteri dei campi. Per informazioni sui campi delle specifiche di formato scanf, vedere Campi di specifica del formato.
Importante
Quando si legge una stringa con sscanf
, specificare sempre una larghezza per il %s
formato , ad esempio "%32s
" anziché "%s
". In caso contrario, l'input formattato in modo non corretto può causare facilmente un sovraccarico del buffer.
swscanf
è una versione a caratteri "wide" di sscanf
. Gli argomenti per swscanf
sono stringhe a caratteri "wide". sscanf
non gestisce caratteri esadecimali multibyte. swscanf
non gestisce caratteri esadecimali a larghezza intera Unicode o "zona di compatibilità". In caso contrario, swscanf
e sscanf
si comportano in modo identico.
Le versioni di queste funzioni con il suffisso _l
sono identiche ad eccezione per il fatto che utilizzano il parametro delle impostazioni locali passato al posto di quelle del thread corrente.
Mapping di routine di testo generico
TCHAR.H routine |
_UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_stscanf |
sscanf |
sscanf |
swscanf |
_stscanf_l |
_sscanf_l |
_sscanf_l |
_swscanf_l |
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
sscanf , _sscanf_l |
<stdio.h> |
swscanf , _swscanf_l |
<stdio.h> oppure <wchar.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_sscanf.c
// compile with: /W3
// This program uses sscanf to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
int main( void )
{
char tokenstring[] = "15 12 14...";
char s[81];
char c;
int i;
float fp;
// Input various data from tokenstring:
// max 80 character string:
sscanf( tokenstring, "%80s", s ); // C4996
sscanf( tokenstring, "%c", &c ); // C4996
sscanf( tokenstring, "%d", &i ); // C4996
sscanf( tokenstring, "%f", &fp ); // C4996
// Note: sscanf is deprecated; consider using sscanf_s instead
// Output the data read
printf( "String = %s\n", s );
printf( "Character = %c\n", c );
printf( "Integer: = %d\n", i );
printf( "Real: = %f\n", fp );
}
String = 15
Character = 1
Integer: = 15
Real: = 15.000000
Vedi anche
I/O di flusso
fscanf
, _fscanf_l
, fwscanf
_fwscanf_l
scanf
, _scanf_l
, wscanf
_wscanf_l
sprintf
, _sprintf_l
, swprintf
, _swprintf_l
__swprintf_l
snprintf
, _snprintf
, _snprintf_l
, _snwprintf
_snwprintf_l