vscanf_s, vwscanf_s

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Lit les données mises en forme du flux d'entrée standard. Ces versions de vscanf, vwscanf ont des améliorations de sécurité, comme décrit dans fonctionnalités de sécurité de la bibliothèque CRT.

int vscanf_s(  
   const char *format,  
   va_list arglist  
);   
int vwscanf_s(  
   const wchar_t *format,  
   va_list arglist  
);  

Paramètres

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

arglist
Liste d’arguments variable.

Retourne le nombre de champs correctement convertis et assignés. La valeur de retour n'inclut pas les champs qui ont été lus mais pas assignés. La valeur de retour 0 indique qu'aucun champ n'a été assigné. La valeur de retour est EOF si une erreur est détectée, ou si le caractère de fin de fichier ou le caractère de fin de chaîne est rencontré durant la première tentative de lecture d'un caractère. Si format est un NULL pointeur, le Gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à continuer, vscanf_s et vwscanf_s retournent EOF et définissent errno à EINVAL.

Pour plus d’informations sur les autres codes d’erreur, consultez errno, _doserrno, _sys_errlist et _sys_nerr.

Le vscanf_s fonction lit les données à partir du flux d’entrée standard stdin et écrit les données dans les emplacements qui sont fournis par le arglist liste d’arguments. Chaque argument dans la liste doit être un pointeur vers une variable d’un type qui correspond au spécificateur de type dans format. Si une copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini.

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

Contrairement à vscanf et vwscanf, vscanf_s et vwscanf_s nécessitent que la taille de la mémoire tampon soit spécifiée pour tous les paramètres d'entrée de type c, C, s, S, ou pour les jeux de contrôles de chaîne entre []. La taille de la mémoire tampon en caractères est passée en tant que paramètre supplémentaire immédiatement après le pointeur vers la mémoire tampon ou la variable. La taille du tampon en caractères pour un wchar_t chaîne n’est pas identique à la taille en octets.

La taille de la mémoire tampon inclut le caractère Null de fin. Vous pouvez utiliser un champ de spécification de largeur pour vous assurer que le jeton qui est lu se tiendront dans la mémoire tampon. Si aucun champ de spécification de largeur n'est utilisé, et si le jeton lu est trop grand pour la mémoire tampon, aucune valeur n'est écrite dans cette mémoire tampon.

System_CAPS_ICON_note.jpg Remarque

Le paramètre relatif à la taille est de type unsigned, et non size_t.

Pour plus d’informations, consultez spécification de largeur scanf.

Mappages de routines de texte générique

Routine TCHAR.H_UNICODE et _MBCS non définis_MBCS défini_UNICODE défini
_vtscanf_svscanf_svscanf_svwscanf_s

Pour plus d’informations, consultez des champs de spécification de Format : fonctions scanf et wscanf.

RoutineEn-tête requis
vscanf_s<stdio.h>
wscanf_s<stdio.h> ou <wchar.h>

La console n'est pas prise en charge dans les applications Windows 8.x Store . Les handles de flux standard associés à la console (stdin, stdout et stderr) doivent être redirigés pour que les fonctions Runtime C puissent les utiliser dans les applications du Windows 8.x Store. Pour plus d'informations sur la compatibilité, voir Compatibilité.

// crt_vscanf_s.c  
// compile with: /W3  
// This program uses the vscanf_s and vwscanf_s functions  
// to read formatted input.  
  
#include <stdio.h>  
#include <stdarg.h>  
#include <stdlib.h>  
  
int call_vscanf_s(char *format, ...)  
{  
    int result;  
    va_list arglist;  
    va_start(arglist, format);  
    result = vscanf_s(format, arglist);  
    va_end(arglist);  
    return result;  
}  
  
int call_vwscanf_s(wchar_t *format, ...)  
{  
    int result;  
    va_list arglist;  
    va_start(arglist, format);  
    result = vwscanf_s(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_s("%d %f %c %C %s %S", &i, &fp, &c, 1,  
                           &wc, 1, s, _countof(s), ws, _countof(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_s(L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,  
                            &wc, 1, s, _countof(s), ws, _countof(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);  
}  
  

Lorsque ce programme est fourni à l’entrée dans l’exemple, il génère cette sortie :

71 98.6 h z Byte characters

36 92.3 y n Wide characters

The 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  

Prise en charge de virgule flottante
Flux d’e/s
Paramètres régionaux
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
vscanf, vwscanf

Afficher: