Nous recommandons d’utiliser Visual Studio 2017

vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Écrivez la sortie mise en forme en utilisant un pointeur désignant une liste d’arguments. Des versions plus sécurisées de ces fonctions sont disponibles. consultez la page vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l.

int vsprintf(  
   char *buffer,  
   const char *format,  
   va_list argptr   
);   
int _vsprintf_l(  
   char *buffer,  
   const char *format,  
   locale_t locale,  
   va_list argptr   
);   
int vswprintf(  
   wchar_t *buffer,  
   size_t count,  
   const wchar_t *format,  
   va_list argptr   
);  
int _vswprintf_l(  
   wchar_t *buffer,  
   size_t count,  
   const wchar_t *format,  
   locale_t locale,  
   va_list argptr   
);  
int __vswprintf_l(  
   wchar_t *buffer,  
   const wchar_t *format,  
   locale_t locale,  
   va_list argptr   
);  
template <size_t size>  
int vsprintf(  
   char (&buffer)[size],  
   const char *format,  
   va_list argptr   
); // C++ only  
template <size_t size>  
int _vsprintf_l(  
   char (&buffer)[size],  
   const char *format,  
   locale_t locale,  
   va_list argptr   
); // C++ only  
template <size_t size>  
int vswprintf(  
   wchar_t (&buffer)[size],  
   const wchar_t *format,  
   va_list argptr   
); // C++ only  
template <size_t size>  
int _vswprintf_l(  
   wchar_t (&buffer)[size],  
   const wchar_t *format,  
   locale_t locale,  
   va_list argptr   
); // C++ only  

Paramètres

buffer
Emplacement de stockage pour la sortie.

count
Nombre maximal de caractères à stocker dans le UNICODE version de cette fonction.

format
Spécification de format.

argptr
Pointeur vers la liste d'arguments.

locale
Paramètres régionaux à utiliser.

vsprintfet vswprintf retourner le nombre de caractères écrits, non compris le caractère null de fin, ou une valeur négative si une erreur de sortie. Si buffer ou format est un pointeur null, ces fonctions appellent le Gestionnaire de paramètre non valide, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent -1 et définissent errno avec la valeur EINVAL.

Pour plus d’informations sur les autres codes d’erreur, consultez _doserrno, errno, _sys_errlist et _sys_nerr.

Chacune de ces fonctions prend un pointeur vers une liste d’arguments et puis met en forme et écrit les données spécifiées dans la mémoire pointée par buffer.

Les versions de ces fonctions avec le suffixe _l sont identiques, sauf qu'elles utilisent les paramètres régionaux passés au lieu des paramètres régionaux du thread actuel.

System_CAPS_ICON_important.jpg Important

À l’aide de vsprintf, ici aucun moyen de limiter le nombre de caractères n’écrit, ce qui signifie que le code à l’aide de cette fonction est vulnérable aux dépassements de mémoire tampon. Utilisez _vsnprintf à la place, ou appeler _vscprintf pour déterminer la taille une mémoire tampon est nécessaire. De même, assurez-vous que format n'est pas une chaîne définie par l'utilisateur. Pour plus d’informations, consultez Solutions contre les dépassements de mémoire tampon.

vswprintf est conforme à la norme ISO C, qui exige le deuxième paramètre, count, de type size_t. Pour forcer l’ancien comportement non standard, définir _CRT_NON_CONFORMING_SWPRINTFS. l’ancien comportement ne soient pas dans une version ultérieure, donc le code doit être modifié pour utiliser le nouveau comportement conforme.

En C++, ces fonctions ont des surcharges de modèle qui appellent les équivalents plus récents et sécurisés de ces fonctions. Pour plus d'informations, consultez Secure Template Overloads.

Mappages de routines de texte générique

Routine TCHAR.H_UNICODE et _MBCS non définis_MBCS défini_UNICODE défini
_vstprintfvsprintfvsprintfvswprintf
_vstprintf_l_vsprintf_l_vsprintf_l_vswprintf_l
RoutineEn-tête requisEn-têtes facultatifs
vsprintf, _vsprintf_l<stdio.h> et <stdarg.h><varargs.h>*
vswprintf, _vswprintf_l<stdio.h> ou <wchar.h>, et <stdarg.h><varargs.h>*

*Requis pour la compatibilité UNIX v..

Pour plus d'informations sur la compatibilité, voir Compatibilité dans l'introduction.

// crt_vsprintf.c  
// compile with: /W3  
// This program uses vsprintf to write to a buffer.  
// The size of the buffer is determined by _vscprintf.  
  
#include <stdlib.h>  
#include <stdio.h>  
#include <stdarg.h>  
  
void test( char * format, ... )  
{  
    va_list args;  
    int     len;  
    char    *buffer;  
  
    // retrieve the variable arguments  
    va_start( args, format );  
  
    len = _vscprintf( format, args ) // _vscprintf doesn't count  
                                + 1; // terminating '\0'  
  
    buffer = (char*)malloc( len * sizeof(char) );  
  
    vsprintf( buffer, format, args ); // C4996  
    // Note: vsprintf is deprecated; consider using vsprintf_s instead  
    puts( buffer );  
  
    free( buffer );  
}  
  
int main( void )  
{  
   test( "%d %c %d", 123, '<', 456 );  
   test( "%s", "This is a string" );  
}  

123 < 456  
This is a string  

System::String::format

Flux d’e/s
Fonctions vprintf
Syntaxe de spécification de format : les 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_copy, va_end, va_start

Afficher: