Condividi tramite


vsscanf_s, vswscanf_s

Legge i dati formattati da una stringa. Queste versioni di hanno vswscanfmiglioramenti 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_errliste _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 vsscanfmeno 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_se scanf Type Field Characters.For more information, see scanf_s, _scanf_s_l, , _wscanf_s_land 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