_sprintf_p
, , _sprintf_p_l
_swprintf_p
, ,_swprintf_p_l
Écrivent des données mises en forme dans une chaîne avec la possibilité de spécifier l’ordre dans lequel les paramètres sont utilisés dans la chaîne de format.
Syntaxe
int _sprintf_p(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument_list]
);
int _sprintf_p_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
_locale_t locale [,
argument_list]
);
int _swprintf_p(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format [,
argument_list]
);
int _swprintf_p_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
_locale_t locale [,
argument_list]
);
Paramètres
buffer
Emplacement de stockage pour la sortie
sizeOfBuffer
Nombre maximal de caractères à stocker.
format
Chaîne de contrôle de format.
argument_list
Arguments facultatifs de la chaîne de format.
locale
Paramètres régionaux à utiliser.
Pour plus d’informations, consultez Syntaxe de spécification de format.
Valeur retournée
Nombre de caractères écrits ou -1 si une erreur s’est produite.
Notes
La fonction _sprintf_p
met en forme une série de caractères et de valeurs et la stocke dans buffer
. Chaque argument du argument_list
(le cas échéant) est converti et généré en fonction de la spécification de format correspondante dans format
. L’argument format
utilise la syntaxe de spécification de format pour et wprintf
les printf
fonctions. Un caractère null est ajouté après le dernier caractère écrit. Si une copie se produit entre des chaînes qui se chevauchent, le comportement est indéfini. La différence entre _sprintf_p
et sprintf_s
vient du fait que _sprintf_p
prend en charge les paramètres positionnels, ce qui vous permet de spécifier l'ordre dans lequel les arguments sont utilisés dans la chaîne de format. Pour plus d’informations, consultez Paramètres positionnels printf_p
.
_swprintf_p
est une version à caractères larges de _sprintf_p
; les arguments de pointeur de _swprintf_p
sont des chaînes à caractères larges. La détection des erreurs _swprintf_p
d’encodage peut différer de la détection dans _sprintf_p
. _swprintf_p
et fwprintf_p
se comportent de façon identique, sauf que _swprintf_p
écrit la sortie dans une chaîne au lieu d'une destination de type FILE
, et que _swprintf_p
requiert le paramètre count
pour spécifier le nombre maximal de caractères à écrire. 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.
_sprintf_p
retourne le nombre d'octets stockés dans buffer
, sans compter le caractère null de fin. _swprintf_p
retourne le nombre de caractères larges stockés dans buffer
, sans compter le caractère large null de fin. S’il buffer
s’agit d’un format
pointeur Null ou si la chaîne de format contient des caractères de mise en forme non valides, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent -1 et définissent errno
avec la valeur EINVAL
.
Important
À compter de Windows 10 version 2004 (build 19041), la famille de fonctions printf
imprime exactement les nombres à virgule flottante pouvant être représentés en suivant les règles IEEE 754 pour l’arrondi. Dans les versions précédentes de Windows, les nombres à virgule flottante pouvant être représentés exactement qui se terminent par « 5 » sont toujours arrondis à la valeur supérieure. IEEE 754 indique qu’ils doivent être arrondis au chiffre pair le plus proche (également appelé « arrondi du banquier »). Par exemple, printf("%1.0f", 1.5)
et printf("%1.0f", 2.5)
doivent être arrondis à 2. Avant, 1.5 aurait été arrondi à 2 et 2.5 à 3. Ce changement affecte uniquement les nombres représentables avec précision. Par exemple, 2.35 (qui, lorsqu’il est représenté en mémoire, est plus proche de 2.35000000000000008) continue d’être arrondi à la valeur supérieure 2.4. L’arrondi effectué par ces fonctions respecte également le mode d’arrondi à virgule flottante défini par fesetround
. Avant, l’arrondi choisissait toujours le comportement FE_TONEAREST
. Ce changement affecte uniquement les programmes générés à l’aide de Visual Studio 2019 versions 16.2 et ultérieures. Pour utiliser le comportement d’arrondi à virgule flottante hérité, 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 |
---|---|---|---|
_stprintf_p |
_sprintf_p |
_sprintf_p |
_swprintf_p |
_stprintf_p_l |
_sprintf_p_l |
_sprintf_p_l |
_swprintf_p_l |
Spécifications
Routine | En-tête requis |
---|---|
_sprintf_p , _sprintf_p_l |
<stdio.h> |
_swprintf_p , _swprintf_p_l |
<stdio.h> ou <wchar.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple : Utiliser _sprintf_p
pour mettre en forme des données
// crt_sprintf_p.c
// This program uses _sprintf_p to format various
// data and place them in the string named buffer.
//
#include <stdio.h>
int main( void )
{
char buffer[200],
s[] = "computer", c = 'l';
int i = 35,
j;
float fp = 1.7320534f;
// Format and print various data:
j = _sprintf_p( buffer, 200,
" String: %s\n", s );
j += _sprintf_p( buffer + j, 200 - j,
" Character: %c\n", c );
j += _sprintf_p( buffer + j, 200 - j,
" Integer: %d\n", i );
j += _sprintf_p( buffer + j, 200 - j,
" Real: %f\n", fp );
printf( "Output:\n%s\ncharacter count = %d\n",
buffer, j );
}
Output:
String: computer
Character: l
Integer: 35
Real: 1.732053
character count = 79
Exemple : Gestion du code d’erreur
// crt_swprintf_p.c
// This is the wide character example which
// also demonstrates _swprintf_p returning
// error code.
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
wchar_t buffer[BUFFER_SIZE];
int len;
len = _swprintf_p(buffer, BUFFER_SIZE, L"%2$s %1$d",
0, L" marbles in your head.");
_printf_p( "Wrote %d characters\n", len );
// _swprintf_p fails because string contains WEOF (\xffff)
len = _swprintf_p(buffer, BUFFER_SIZE, L"%s",
L"Hello\xffff world" );
_printf_p( "Wrote %d characters\n", len );
}
Wrote 24 characters
Wrote -1 characters
Voir aussi
E/S de flux
_fprintf_p
, , _fprintf_p_l
_fwprintf_p
, ,_fwprintf_p_l
fprintf
, , _fprintf_l
fwprintf
, ,_fwprintf_l
_printf_p
, , _printf_p_l
_wprintf_p
, ,_wprintf_p_l
printf
, , _printf_l
wprintf
, ,_wprintf_l
sprintf
, , _sprintf_l
swprintf
, , _swprintf_l
__swprintf_l
scanf
, , _scanf_l
wscanf
, ,_wscanf_l
sscanf
, , _sscanf_l
swscanf
, ,_swscanf_l
sscanf_s
, , _sscanf_s_l
swscanf_s
, ,_swscanf_s_l
vprintf
, fonctions
printf_p
Paramètres positionnels