Partager via


vsscanf, vswscanf

Lit les données mises en forme d’une chaîne. Des versions plus sécurisées de ces fonctions sont disponibles ; voir vsscanf_s, vswscanf_s.

Syntaxe

int vsscanf(
   const char *buffer,
   const char *format,
   va_list arglist
);
int vswscanf(
   const wchar_t *buffer,
   const wchar_t *format,
   va_list arglist
);

Paramètres

buffer
Données stockées

format
Chaîne de contrôle de format. Pour plus d’informations, consultez Champs de spécification de format : scanf et wscanf fonctions.

arglist
Liste d’arguments de variable.

Valeur retournée

Chacune de ces fonctions retourne le nombre de champs qui sont correctement convertis et affectés. La valeur de retour n’inclut pas les champs qui ont été lus mais qui n’ont pas été affectés. La valeur de retour 0 indique qu'aucun champ n'a été assigné. La valeur de retour est EOF en cas d’erreur ou si la fin de la chaîne est atteinte avant la première conversion.

Si buffer ou format est un NULL pointeur, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent -1 et définissent errno avec la valeur EINVAL.

Pour plus d’informations sur ces codes d’erreur et d’autres codes d’erreur, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Notes

La fonction vsscanf lit les données de buffer dans les emplacements fournis par chaque argument figurant dans la liste d’arguments arglist. Chaque argument de la liste doit être un pointeur désignant une variable dont le type correspond à un spécificateur de type dans format. L’argument format contrôle l’interprétation des champs d’entrée et a les mêmes forme et fonction que l’argument format de la fonction scanf. Si la copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.

Important

Lorsque vous utilisez vsscanf pour lire une chaîne, spécifiez toujours une largeur pour le format %s (par exemple, « %32s » au lieu de « %s ») ; sinon, une entrée au format incorrect peut entraîner un dépassement de mémoire tampon.

vswscanf est une version à caractères larges de vsscanf; les arguments de vswscanf sont des chaînes à caractères larges. vsscanf ne gère pas les caractères hexadécimaux multioctets. vswscanf ne gère pas les caractères hexadécimaux hexadécimaux ou « zone de compatibilité » Unicode. Sinon, vswscanf et vsscanf se comportent de la même façon.

Mappages de routine de texte générique

Routine TCHAR.H _UNICODE et _MBCS non défini _MBCS Défini _UNICODE Défini
_vstscanf vsscanf vsscanf vswscanf

Spécifications

Routine En-tête requis
vsscanf <stdio.h>
vswscanf <stdio.h> ou <wchar.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// 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

Voir aussi

E/S de flux
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vsscanf_s, vswscanf_s