vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_lvsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l

Écrivez la sortie mise en forme en utilisant un pointeur désignant une liste d’arguments.Write formatted output using a pointer to a list of arguments. Il existe des versions plus sécurisées de ces fonctions. Consultez vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l.More secure versions of these functions are available; see vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l.

SyntaxeSyntax

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ètresParameters

mémoire tamponbuffer
Emplacement de stockage pour la sortie.Storage location for output.

sautcount
Nombre maximal de caractères à stocker dans les versions de chaîne étendues de cette fonction.Maximum number of characters to store, in the wide string versions of this function.

formatformat
Spécification de format.Format specification.

argptrargptr
Pointeur vers la liste d'arguments.Pointer to list of arguments.

paramètres régionauxlocale
Paramètres régionaux à utiliser.The locale to use.

Valeur de retourReturn Value

vsprintf et vswprintf retournent le nombre de caractères écrits, à l’exclusion du caractère null de fin, ou une valeur négative si une erreur de sortie se produit.vsprintf and vswprintf return the number of characters written, not including the terminating null character, or a negative value if an output error occurs. Si la mémoire tampon ou le format est un pointeur null, ces fonctions appellent le gestionnaire de paramètres non valides, comme décrit dans validation de paramètre.If buffer or format is a null pointer, these functions invoke the invalid parameter handler, as described in Parameter Validation. Si l’exécution est autorisée à se poursuivre, ces fonctions retournent-1 et attribuent à errno la valeur EINVAL.If execution is allowed to continue, these functions return -1 and set errno to EINVAL.

Pour plus d’informations sur ces codes d’erreur et les autres, consultez _doserrno, errno, _sys_errlist et _sys_nerr.For information on these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

NotesRemarks

Chacune de ces fonctions prend un pointeur désignant une liste d’arguments, puis met en forme et écrit les données fournies dans la mémoire vers laquelle pointe la mémoire tampon.Each of these functions takes a pointer to an argument list, and then formats and writes the given data to the memory pointed to by 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.The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

Important

À l’aide de vsprintf, il n’existe aucun moyen de limiter le nombre de caractères écrits, ce qui signifie que le code qui utilise cette fonction est vulnérable aux dépassements de mémoire tampon.Using vsprintf, there is no way to limit the number of characters written, which means that code using this function is susceptible to buffer overruns. Utilisez plutôt _vsnprintf ou appelez _vscprintf pour déterminer la taille nécessaire d’une mémoire tampon.Use _vsnprintf instead, or call _vscprintf to determine how large a buffer is needed. En outre, assurez-vous que format n’est pas une chaîne définie par l’utilisateur.Also, ensure that format is not a user-defined string. Pour plus d’informations, consultez Solutions contre les dépassements de mémoire tampon.For more information, see Avoiding Buffer Overruns.

vswprintf est conforme à la norme ISO C, qui exige le deuxième paramètre, Count, de type size_t.vswprintf conforms to the ISO C Standard, which requires the second parameter, count, of type size_t. Pour forcer l’ancien comportement non standard, définissez _CRT_NON_CONFORMING_SWPRINTFS.To force the old nonstandard behavior, define _CRT_NON_CONFORMING_SWPRINTFS. L’ancien comportement n’est peut-être pas dans une version ultérieure. par conséquent, le code doit être modifié pour utiliser le nouveau comportement conforme.The old behavior may not be in a future version, so code should be changed to use the new conformant behavior.

En C++, ces fonctions ont des surcharges de modèle qui appellent les équivalents plus récents et sécurisés de ces fonctions.In C++, these functions have template overloads that invoke the newer, secure counterparts of these functions. Pour plus d'informations, consultez Secure Template Overloads.For more information, see Secure Template Overloads.

Mappages de routines de texte génériqueGeneric-Text Routine Mappings

Routine TCHAR.HTCHAR.H routine _UNICODE et _MBCS non définis_UNICODE & _MBCS not defined _MBCS défini_MBCS defined _UNICODE défini_UNICODE defined
_vstprintf_vstprintf vsprintfvsprintf vsprintfvsprintf vswprintfvswprintf
_vstprintf_l_vstprintf_l _vsprintf_l_vsprintf_l _vsprintf_l_vsprintf_l _vswprintf_l_vswprintf_l

Configuration requiseRequirements

RoutineRoutine En-tête requisRequired header En-têtes facultatifsOptional headers
vsprintf, _vsprintf_lvsprintf, _vsprintf_l <stdio.h> et <stdarg.h><stdio.h> and <stdarg.h> <varargs.h>*<varargs.h>*
vswprintf, _vswprintf_lvswprintf, _vswprintf_l <stdio.h> ou <wchar.h> et <stdarg.h><stdio.h> or <wchar.h>, and <stdarg.h> <varargs.h>*<varargs.h>*

* Nécessaire pour la compatibilité avec UNIX V.* Required for UNIX V compatibility.

Pour plus d'informations sur la compatibilité, voir Compatibilité.For additional compatibility information, see Compatibility.

ExempleExample

// crt_vsprintf.c
// compile with: cl /W4 crt_vsprintf.c
// This program uses vsprintf to write to a buffer.
// The size of the buffer is determined by _vscprintf.

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

void test( char const * const 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) );
    if ( 0 != buffer )
    {
        vsprintf( buffer, format, args ); // C4996
        // Note: vsprintf is deprecated; consider using vsprintf_s instead
        puts( buffer );

        free( buffer );
    }
    va_end( args );
}

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

Voir aussiSee also

E/S de fluxStream I/O
vprintf, fonctionsvprintf Functions
Syntaxe de spécification de format : fonctions printf et wprintfFormat Specification Syntax: printf and wprintf Functions
fprintf, _fprintf_l, fwprintf, _fwprintf_lfprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_lprintf, _printf_l, wprintf, _wprintf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
va_arg, va_copy, va_end, va_startva_arg, va_copy, va_end, va_start