sscanf, _sscanf_l, swscanf, _swscanf_l
Leggere 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.
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 archiviatiformat
Stringa di controllo del formato. Per ulteriori informazioni, vedere Specifiche di formato.argument
Argomenti facoltativilocale
Impostazioni locali da utilizzare.
Valore restituito
Ognuna di queste funzioni restituisce il numero di campi che vengono convertiti ed assegnati correttamente; 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. Il valore restituito è EOF per un errore, o se la fine della stringa viene raggiunta prima della prima conversione.
Se buffer o format è un NULL puntatore null, viene richiamato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione restituisce -1 e imposta errno su EINVAL.
Per ulteriori informazioni su questi, e altri, codici di errore vedere _doserrno, errno, _sys_errlist, and _sys_nerr .
Note
La funzione sscanf legge i dati da buffer nella posizione fornita da ogni argument. Ogni argument deve essere un puntatore a una variabile con un tipo che corrisponde a un tipo specificato in format. L'argomento format controlla l'interpretazione dei campi di input e ha gli stessi form e funzione dell'argomento format per la funzione scanf. Se la copia avviene tra stringhe che si sovrappongono, il comportamento non è definito.
Nota sulla sicurezza |
---|
Quando si legge una stringa con sscanf specificare sempre una larghezza per il formato %s (ad esempio, "%32s" anziché "%s"); in caso contrario, un input inappropriato può facilmente causare un sovraccarico del buffer. |
swscanf è una versione a caratteri "wide" di sscanf. Gli argomenti per swscanf sono stringhe a caratteri "wide". sscanfnon gestisce caratteri esadecimali multibyte. swscanf non gestisce i caratteri esadecimali o dell'"area di compatibilità" a larghezza intera Unicode. 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
Routine TCHAR.H |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_stscanf |
sscanf |
sscanf |
swscanf |
_stscanf_l |
_sscanf_l |
_sscanf_l |
_swscanf_l |
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
sscanf, _sscanf_l |
<stdio.h> |
swscanf, _swscanf_l |
<stdio.h> o <wchar.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.
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 );
}
Equivalente .NET Framework
Vedere i metodi Parse, come System::Double::Parse.
Vedere anche
Riferimenti
fscanf, _fscanf_l, fwscanf, _fwscanf_l
scanf, _scanf_l, wscanf, _wscanf_l