Condividi tramite


vsscanf, vswscanf

Legge i dati formattati da una stringa. Sono disponibili versioni più sicure di queste funzioni; vedere vsscanf_s, vswscanf_s.

Sintassi

int vsscanf(
   const char *buffer,
   const char *format,
   va_list arglist
);
int vswscanf(
   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 legge i dati da buffer nelle posizioni specificate da ogni argomento nell'elenco di argomenti arglist. Ogni argomento nell'elenco deve essere un puntatore a una variabile di 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.

Importante

Quando si usa vsscanf per leggere una stringa, specificare sempre una larghezza per il formato %s , ad esempio "%32s" anziché "%s". In caso contrario, l'input formattato in modo non corretto può causare un sovraccarico del buffer.

vswscanf è una versione a caratteri "wide" di vsscanf. Gli argomenti per vswscanf sono stringhe a caratteri "wide". vsscanf non gestisce caratteri esadecimali multibyte. vswscanf non gestisce caratteri esadecimali a larghezza intera Unicode o "zona di compatibilità". In caso contrario, vswscanf e vsscanf si comportano in modo identico.

Mapping di routine di testo generico

Routine TCHAR.H _UNICODE e _MBCS non definito _MBCS definito _UNICODE definito
_vstscanf vsscanf vsscanf vswscanf

Requisiti

Ciclo Intestazione obbligatoria
vsscanf <stdio.h>
vswscanf <stdio.h> o <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// crt_vsscanf.c
// compile with: /W3
// This program uses vsscanf to read data items
// from a string named tokenstring, then displays them.

#include <stdio.h>
#include <stdarg.h>

int call_vsscanf(char *tokenstring, char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vsscanf(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(tokenstring, "%80s", s);
    call_vsscanf(tokenstring, "%c", &c);
    call_vsscanf(tokenstring, "%d", &i);
    call_vsscanf(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
sprintf, _sprintf_l, swprintf, _swprintf_l__swprintf_l
vsscanf_s, vswscanf_s