Partager via


vscanf, vwscanf

Lit les données mises en forme du flux d'entrée standard. Des versions plus sécurisées de ces fonctions sont disponibles ; voir vscanf_s, vwscanf_s.

Syntaxe

int vscanf(
   const char *format,
   va_list arglist
);
int vwscanf(
   const wchar_t *format,
   va_list arglist
);

Paramètres

format
Format de la chaîne de contrôle.

arglist
Liste d’arguments de variable.

Valeur retournée

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é.

S’il format s’agit d’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 EOF 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 vscanf lit les données du flux d’entrée standard stdin et les écrit aux emplacements indiqués par la liste d’arguments arglist. Chaque argument de la liste doit être un pointeur désignant une variable d’un type qui correspond à un spécificateur de type dans format. Si une copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.

Important

Lorsque vous utilisez vscanf 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. En guise d’alternative, vous pouvez utiliser vscanf_s, vwscanf_s ou fgets.

vwscanf est une version à caractères larges de vscanf; l'argument format de vwscanf est une chaîne à caractères larges. vwscanf et vscanf se comportent de la même façon si le flux est ouvert en mode ANSI. vscanf ne prend pas en charge l’entrée d’un flux UNICODE.

Mappages de routine de texte générique

Routine TCHAR.H _UNICODE et _MBCS non défini _MBCS Défini _UNICODE Défini
_vtscanf vscanf vscanf vwscanf

Pour plus d’informations, consultez Champs de spécification de format : scanf et wscanf fonctions.

Spécifications

Routine En-tête requis
vscanf <stdio.h>
vwscanf <stdio.h> ou <wchar.h>

La console n’est pas prise en charge dans les applications plateforme Windows universelle (UWP). Les handles de flux standard associés à la console, stdinet stdoutstderrdoivent être redirigés avant que les fonctions d’exécution C puissent les utiliser dans les applications UWP. Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_vscanf.c
// compile with: /W3
// This program uses the vscanf and vwscanf functions
// to read formatted input.

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

int call_vscanf(char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vscanf(format, arglist);
    va_end(arglist);
    return result;
}

int call_vwscanf(wchar_t *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vwscanf(format, arglist);
    va_end(arglist);
    return result;
}

int main( void )
{
    int   i, result;
    float fp;
    char  c, s[81];
    wchar_t wc, ws[81];
    result = call_vscanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws );
    printf( "The number of fields input is %d\n", result );
    printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
    result = call_vwscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws );
    wprintf( L"The number of fields input is %d\n", result );
    wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}

      71 98.6 h z Byte characters
36 92.3 y n Wide charactersThe number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

Voir aussi

Prise en charge mathématique et à virgule flottante
E/S de flux
Paramètres régionaux
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
vscanf_s, vwscanf_s