vscanf_s, vwscanf_s

De RAD Studio
Aller à : navigation, rechercher

Remonter à stdio.h - Index


Fichier en-tête

stdio.h

Catégorie

Fonctions d'entrée/sortie formatées

Prototype

int vscanf_s(const char * restrict format, va_list arg);

int vwscanf_s(const wchar_t * restrict format, va_list arg);

Description

Remplace vscanf en ajoutant des améliorations relatives à la sécurité.

Remarque : N'utilisez pas cette fonction dans les applications Win32 GUI.

Les fonctions v...scanf sont connues comme autres points d'entrée pour les fonctions ...scanf. Elles se comportent exactement comme leurs équivalents ...scanf, mais elles acceptent un pointeur sur une liste d'arguments au lieu d'une liste d'arguments.

vscanf_s analyse une suite de champs d'entrée, un caractère à la fois, en effectuant la lecture à partir de stdin. Chaque champ est ensuite formaté selon un spécificateur de format passé à vscanf dans la chaîne de format pointée par format. Enfin, vscanf_s stocke l'entrée formatée aux adresses qui lui sont passées dans la liste d'arguments. Le nombre de spécificateurs de format et d'adresses doit être identique au nombre de champs d'entrée.

vscanf_s peut interrompre l'analyse d'un champ particulier avant d'atteindre le caractère fin-de-champ (blanc) normal, ou elle peut se terminer en ayant tout analyser, pour un certain nombre de raisons. Voir scanf pour une discussion des causes possibles.

vscanf_s est équivalente à scanf_s, wscanf_s avec la liste d'arguments variable remplacée par arg. La fonction vscanf_s n'invoque pas la macro va_end.

Valeur renvoyée

vscanf renvoie le nombre de champs d'entrée correctement analysés, convertis et stockés. La valeur renvoyée n'inclut pas les champs analysés qui n'ont pas été stockés. Si aucun champ n'a été stocké, la valeur renvoyée est zéro.

Si une erreur se produit, la valeur renvoyée est la valeur de la macro EOF.

Exemple

#include <stdio.h>
#include <stdarg.h>
int vscnf(char *fmt, ...)
{
   va_list argptr;
   int cnt;
   printf("Enter an integer, a float, and a string (e.g. i,f,s,)\n");
   va_start(argptr, fmt);
   cnt = vscanf_s(fmt, argptr);
   va_end(argptr);
   return(cnt);
}
int main(void)
{
   int inumber;
   float fnumber;
   char string[80];
   vscnf("%d, %f, %s", &inumber, &fnumber, string);
   printf_s("%d %f %s\n", inumber, fnumber, string);
   return 0;
}

Portabilité

POSIX Win32 ANSI C ANSI C++

+

+

+

Voir aussi