vsprintf_s, vswprintf_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 vsprintf_s(char * restrict s, rsize_t n, const char * restrict format, va_list arg);

int vswprintf_s(wchar_t * restrict s, rsize_t n, const wchar_t * restrict format, va_list arg);

Description

Remplace vsprintf, vswprintf en ajoutant des améliorations relatives à la sécurité.

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

vsprintf_s accepte un pointeur sur une suite d'arguments, applique à chacun un spécificateur de format contenu dans la chaîne de format pointée par format, et envoie les données formatées dans une chaîne. Le nombre de spécificateurs de format doit être identique au nombre d'arguments.

vfprintf_s est équivalente à vsprintf, vswprintf, mais elle ajoute le paramètre n et des contraintes d'exécution quant à la validité de s, du format et des éléments du paramètre arg correspondant à un spécificateur de format %s (comme mentionné plus tôt, ne doivent pas être des pointeurs null).

En cas de violation de contrainte d'exécution, vsprintf_s définit '\0' sur s[0].

A l'inverse de vsnprintf_s, vsnwprintf_s, vsprintf_s ne tronque pas le résultat pour tenir dans le tableau pointé par s. A la place, une violation de contrainte d'exécution est émise.

Valeur renvoyée

vsprintf_s renvoie le nombre de caractères de la sortie. En cas d'erreur, vsprintf_s renvoie une valeur négative. Dans tous les autres cas, vsprintf_s renvoie zéro.

Exemple

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
char buffer[80];
int vspf(char *fmt, ...)
{
   va_list argptr;
   int cnt;
   va_start(argptr, fmt);
   cnt = vsprintf_s(buffer, 70,fmt, argptr);
   va_end(argptr);
   return(cnt);
}
int main(void)
{
   int inumber = 30;
   float fnumber = 90.0;
   char string[4] = "abc";
   vspf("%d %f %s", inumber, fnumber, string);
   printf_s("%s\n", buffer);
   return 0;
}

Portabilité

POSIX Win32 ANSI C ANSI C++

vsprintf_s

+

+

+

+

vswprintf_s

+

+

+


Voir aussi