vsscanf_s
, vswscanf_s
Legge i dati formattati da una stringa. Queste versioni di hanno vswscanf
miglioramenti pervsscanf
la sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
int vsscanf_s(
const char *buffer,
const char *format,
va_list argptr
);
int vswscanf_s(
const wchar_t *buffer,
const wchar_t *format,
va_list arglist
);
Parametri
buffer
Dati archiviati
format
Stringa di controllo del formato. Per altre informazioni, vedere Formattare i campi delle specifiche: scanf
e wscanf
le funzioni.
arglist
Elenco di argomenti variabili.
Valore restituito
Ognuna di queste funzioni restituisce il numero di campi che vengono convertiti e assegnati correttamente. Il valore restituito non include i 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 vsscanf_s
legge i dati da buffer
nelle posizioni specificate da ogni argomento nell'elenco di argomenti arglist
. Gli argomenti nell'elenco degli argomenti specificano i puntatori alle variabili che hanno un tipo corrispondente all'identificatore di tipo in format
. A differenza della versione vsscanf
meno sicura, è necessario un parametro di dimensione del buffer quando si usano i caratteri di campo del tipo c, C, s, S o set di controllo stringa racchiusi in []. Le dimensioni del buffer in caratteri devono essere fornite come un altro parametro immediatamente dopo ogni parametro del buffer che lo richiede.
La dimensione del buffer include il carattere di terminazione null. Potrebbe essere usato un campo di specifica della larghezza per assicurarsi che il token letto possa essere inserito nel buffer. Se non viene usato alcun campo di specifica della larghezza e il token letto in è troppo grande per adattarsi al buffer, non viene scritto nulla in tale buffer.
Per altre informazioni, vedere , , wscanf_s
e scanf Type Field Characters.For more information, see scanf_s
, _scanf_s_l
, , _wscanf_s_l
and scanf Type Field Characters.
Nota
Il parametro di dimensione è di tipo unsigned
non size_t
.
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_s
. Se la copia avviene tra stringhe che si sovrappongono, il comportamento non è definito.
vswscanf_s
è una versione a caratteri "wide" di vsscanf_s
. Gli argomenti per vswscanf_s
sono stringhe a caratteri "wide". vsscanf_s
non gestisce caratteri esadecimali multibyte. vswscanf_s
non gestisce caratteri esadecimali a larghezza intera Unicode o "zona di compatibilità". In caso contrario, vswscanf_s
e vsscanf_s
si comportano in modo identico.
Mapping di routine di testo generico
Routine TCHAR.H | _UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_vstscanf_s |
vsscanf_s |
vsscanf_s |
vswscanf_s |
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
vsscanf_s |
<stdio.h> |
vswscanf_s |
<stdio.h> o <wchar.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_vsscanf_s.c
// compile with: /W3
// This program uses vsscanf_s to read data items
// from a string named tokenstring, then displays them.
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
int call_vsscanf_s(char *tokenstring, char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vsscanf_s(tokenstring, format, arglist);
va_end(arglist);
return result;
}
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:
call_vsscanf_s(tokenstring, "%80s", s, _countof(s));
call_vsscanf_s(tokenstring, "%c", &c, sizeof(char));
call_vsscanf_s(tokenstring, "%d", &i);
call_vsscanf_s(tokenstring, "%f", &fp);
// 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
scanf
, _scanf_l
, wscanf
_wscanf_l
sscanf
, _sscanf_l
, swscanf
_swscanf_l
sscanf_s
, _sscanf_s_l
, swscanf_s
_swscanf_s_l
sprintf
, _sprintf_l
, swprintf
, _swprintf_l
__swprintf_l
vsscanf
, vswscanf