Partager via


vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l

Entrez la sortie mise en forme à l'aide d'un pointeur vers une liste d'arguments.Ce sont des versions de vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l avec des améliorations de sécurité comme décrit dans Fonctionnalités de sécurité du CRT.

int vsprintf_s(
   char *buffer,
   size_t numberOfElements,
   const char *format,
   va_list argptr 
); 
int _vsprintf_s_l(
   char *buffer,
   size_t numberOfElements,
   const char *format,
   locale_t locale,
   va_list argptr 
); 
int vswprintf_s(
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *format,
   va_list argptr 
);
int _vswprintf_s_l(
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
);
template <size_t size>
int vsprintf_s(
   char (&buffer)[size],
   const char *format,
   va_list argptr 
); // C++ only
template <size_t size>
int vswprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   va_list argptr 
); // C++ only

Paramètres

  • buffer
    emplacement de stockage pour la sortie.

  • numberOfElements
    Taille d' buffer en caractères.

  • format
    Spécification de format.

  • argptr
    Pointeur vers la liste d'arguments.

  • locale
    Les paramètres régionaux à utiliser.

Valeur de retour

vsprintf_s et vswprintf_s retournent le nombre de caractères entrés, sans le caractère NULL de fin, ou une valeur négative si une erreur de sortie se produit.Si buffer ou format est un pointeur null, si le nombre est égal à zéro, ou si la chaîne de format contient les caractères de mise en forme valides, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, les fonctions retournent -1 et errno défini à EINVAL.

Pour plus d'informations sur ces éléments et d'autres codes d'erreur, consultez _doserrno, errno, _sys_errlist, et _sys_nerr.

Notes

Chacune de ces fonctions prend un pointeur vers une liste d'arguments, puis aux formats et écrit les données données dans la mémoire désignée par buffer.

vswprintf_s est conforme à la norme ISO C pour vswprintf, qui requiert le deuxième paramètre, count, de type size_t.

Ces fonctions diffèrent des versions non sécurisées que parce que les versions sécurisées prennent en charge les paramètres positionnels.Pour plus d'informations, consultez paramètres positionnels de printf_p.

Les versions de ces fonctions par le suffixe d' _l sont identiques mais elles utilisent le paramètre de paramètres régionaux passé au lieu des paramètres régionaux du thread courant.

En C++, à l'aide de ces fonctions est simplifié par des surcharges de modèle ; les surcharges peuvent également déduire la longueur de la mémoire tampon automatiquement (en éliminant le besoin de spécifier un argument de taille) et peuvent remplacer automatiquement des fonctions plus anciennes et non sécurisées par leurs nouvelles, sécurisées équivalents.Pour plus d'informations, consultez Surcharges sécurisées de modèle.

mappages de routines de texte générique

routine de TCHAR.H

_MBCS & de _UNICODE non défini

_MBCS défini

_UNICODE défini

_vstprintf_s

vsprintf_s

vsprintf_s

vswprintf_s

_vstprintf_s_l

_vsprintf_s_l

_vsprintf_s_l

_vswprintf_s_l

Configuration requise

routine

en-tête requis

en-têtes facultatifs

vsprintf_s, _vsprintf_s_l

<stdio.h> et <stdarg.h>

<varargs.h> *

vswprintf_s, _vswprintf_s_l

<stdio.h> ou <wchar.h> , et <stdarg.h>

<varargs.h> *

* Requis pour la compatibilité UNIX V.

Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.

Exemple

// crt_vsprintf_s.c
// This program uses vsprintf_s to write to a buffer.
// The size of the buffer is determined by _vscprintf.

#include <stdlib.h>
#include <stdarg.h>

void test( char * format, ... )
{
   va_list args;
   int len;
   char * buffer;

   va_start( args, format );
   len = _vscprintf( format, args ) // _vscprintf doesn't count
                               + 1; // terminating '\0'
   buffer = malloc( len * sizeof(char) );
   vsprintf_s( buffer, len, format, args );
   puts( buffer );
   free( buffer );
}

int main( void )
{
   test( "%d %c %d", 123, '<', 456 );
   test( "%s", "This is a string" );
}
  

Équivalent .NET Framework

System : : chaîne : : format

Voir aussi

Référence

E/S de flux

fonctions de vprintf

Syntaxe de spécification de format : fonctions printf et wprintf

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

va_arg ; va_end ; va_start