vsprintf_s, vswprintf_s
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 |
+ |
+ |
+ |