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

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

Description

Remplace vsnprintf, vsnwprintf en ajoutant des améliorations relatives à la sécurité.

vsnprintf_s est équivalente à vsnprintf, vsnwprintf, à l'exception qu'elle apporte des contraintes d'exécution explicites quant à la validité de s et format. En outre, n ne doit pas être égal à zéro et doit être plus petit que RSIZE_MAX, et chaque argument de la liste d'arguments correspondant à un spécificateur de format %s ne doit pas être un pointeur null.

En cas d'erreur, vnsprintf_s définit '\0' sur s[0].

vsnprintf_s, à l'inverse de vsprintf s, vswprintf s, tronquera le résultat sur la longueur du tableau sur lequel pointe s.

Si le nombre d'octets à générer est :

  • < nsize, tous les caractères sont alors été écrits, notamment le caractère de terminaison '\0'.
  • == nsize, les nsize caractères sont écrits, sans le caractère de terminaison '\0'.
  • > nsize, seuls les nsize caractères sont alors écrits, sans le caractère de terminaison '\0'.

Si nsize vaut 0, la chaîne ne sera pas alors écrite (et peut être à NULL).

Valeur renvoyée

Nombre de caractères de la sortie, ou si nsize vaut zéro, le nombre d'octets requis, sans tenir compte du caractère de terminaison '\0'.

'\0' est écrit seulement si la valeur renvoyée est supérieure à zéro et inférieure à n.

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 = vsnprintf_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;
}

Voir aussi