Condividi tramite


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_errliste _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