Partager via


_vsprintf_p, , _vsprintf_p_l_vswprintf_p, ,_vswprintf_p_l

Écrivez une sortie formatée à l’aide d’un pointeur vers une liste d’arguments, avec la possibilité de spécifier l’ordre dans lequel les arguments sont utilisés.

Syntaxe

int _vsprintf_p(
   char *buffer,
   size_t sizeInBytes,
   const char *format,
   va_list argptr
);
int _vsprintf_p_l(
   char *buffer,
   size_t sizeInBytes,
   const char *format,
   _locale_t locale,
   va_list argptr
);
int _vswprintf_p(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   va_list argptr
);
int _vswprintf_p_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   _locale_t locale,
   va_list argptr
);

Paramètres

buffer
Emplacement de stockage pour la sortie.

sizeInBytes
Taille de buffer en caractères.

count
Nombre maximum de caractères à stocker, dans la version UNICODE de cette fonction.

format
Spécification du format.

argptr
Pointeur vers la liste des arguments.

locale
Locale à utiliser.

Valeur retournée

_vsprintf_p et _vswprintf_p renvoie le nombre de caractères écrits, sans compter le caractère de fin, NULL ou une valeur négative en cas d’erreur de sortie. Si le buffer est un NULL pointeur et sizeInBytes que ou count sont nuls, les fonctions renvoient le nombre de caractères qui auraient été écrits, sans compter la terminaison NULL. Si la valeur est valide et buffer que ou sizeInBytescount sont nuls, renvoie -1.

Remarques

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

Ces fonctions diffèrent de et vsprintf_s uniquement en ce qu’elles prennent en charge les vswprintf_s paramètres de position. Pour plus d’informations, reportez-vous à la section Paramètres de position printf_p.

Les versions de ces fonctions avec le _l suffixe sont identiques, sauf qu’elles utilisent le paramètre locale passé à la place de la locale du thread actuel.

Si les paramètres ou buffer sont format des NULL pointeurs, ou si la chaîne de format contient des caractères de formatage non valides, le gestionnaire de paramètres non valide est appelé, comme décrit dans la section Validation des paramètres. Si l’exécution est autorisée à se poursuivre, les fonctions renvoient -1 et la valeur errno .EINVAL

Important

À partir de Windows 10 version 2004 (build 19041), la printf famille de fonctions imprime des nombres à virgule flottante exactement représentables selon les règles d’arrondi IEEE 754. Dans les versions précédentes de Windows, les nombres à virgule flottante se terminant par « 5 » étaient toujours arrondis à la hausse. L’IEEE 754 stipule qu’ils doivent arrondir au chiffre pair le plus proche (également connu sous le nom d'« arrondi du banquier »). Par exemple, les deux printf("%1.0f", 1.5) et printf("%1.0f", 2.5) doivent être arrondis à 2. Auparavant, 1,5 s’arrondissait à 2 et 2,5 à 3. Ce changement n’affecte que les numéros exactement représentables. Par exemple, 2,35 (qui, lorsqu’il est représenté en mémoire, est plus proche de 2,350000000000008) continue d’arrondir à 2,4. L’arrondi effectué par ces fonctions respecte désormais également le mode d’arrondi en virgule flottante défini par fesetround. Auparavant, l’arrondi choisissait toujours le FE_TONEAREST comportement. Cette modification affecte uniquement les programmes créés à l’aide de Visual Studio 2019 version 16.2 et ultérieure. Pour utiliser le comportement d’arrondi à virgule flottante héritée, liez avec legacy_stdio_float_rounding.obj.

Mappages de routines de texte générique

Routine TCHAR.H _UNICODE et _MBCS non définis _MBCS défini _UNICODE défini
_vstprintf_p _vsprintf_p _vsprintf_p _vswprintf_p
_vstprintf_p_l _vsprintf_p_l _vsprintf_p_l _vswprintf_p_l

Spécifications

Routine En-tête requis En-têtes facultatifs
_vsprintf_p, _vsprintf_p_l <stdio.h> et <stdarg.h> <varargs.h>*
_vswprintf_p, _vswprintf_p_l <stdio.h> ou <wchar.h>, et <stdarg.h> <varargs.h>*

* Requis pour la compatibilité UNIX V.

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple :

// crt__vsprintf_p.c
// This program uses vsprintf_p to write to a buffer.
// The size of the buffer is determined by _vscprintf_p.

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

void example( char * format, ... )
{
    va_list  args;
    int      len;
    char     *buffer = NULL;

    va_start( args, format );

    // _vscprintf doesn't count the
    // null terminating string so we add 1.
    len = _vscprintf_p( format, args ) + 1;

    // Allocate memory for our buffer
    buffer = (char*)malloc( len * sizeof(char) );
    if (buffer)
    {
        _vsprintf_p( buffer, len, format, args );
        puts( buffer );
        free( buffer );
    }
    va_end( args );
}

int main( void )
{
    // First example
    example( "%2$d %1$c %3$d", '<', 123, 456 );

    // Second example
    example( "%s", "This is a string" );
}
123 < 456
This is a string

Voir aussi

E/S de flux
vprintf fonctions
Spécification de format, printf syntaxe : et wprintf fonctions
fprintf, , _fprintf_lfwprintf, ,_fwprintf_l
printf, , _printf_lwprintf, ,_wprintf_l
sprintf, _sprintf_l, , swprintf, _swprintf_l, __swprintf_l
va_arg, , va_copyva_end, ,va_start