Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
É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 sizeInBytes
count
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_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