sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

 

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

Écrire des données mises en forme dans une chaîne. Des versions plus sécurisées de certaines de ces fonctions sont disponibles. consultez la page sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l. Les versions sécurisées de swprintf et _swprintf_l ne prennent pas de paramètre count.

int sprintf(  
   char *buffer,  
   const char *format [,  
   argument] ...   
);  
int _sprintf_l(  
   char *buffer,  
   const char *format,  
   locale_t locale [,  
   argument] ...   
);  
int swprintf(  
   wchar_t *buffer,  
   size_t count,  
   const wchar_t *format [,  
   argument]...  
);  
int _swprintf_l(  
   wchar_t *buffer,  
   size_t count,  
   const wchar_t *format,  
   locale_t locale [,  
   argument] ...   
);  
int __swprintf_l(  
   wchar_t *buffer,  
   const wchar_t *format,  
   locale_t locale [,  
   argument] ...   
);  
template <size_t size>  
int sprintf(  
   char (&buffer)[size],  
   const char *format [,  
   argument] ...   
); // C++ only  
template <size_t size>  
int _sprintf_l(  
   char (&buffer)[size],  
   const char *format,  
   locale_t locale [,  
   argument] ...   
); // C++ only  
  

Paramètres

buffer
Emplacement de stockage pour la sortie

count
Nombre maximal de caractères à stocker dans la version Unicode de cette fonction.

format
Chaîne de contrôle de format

argument
Arguments facultatifs

locale
Paramètres régionaux à utiliser.

Pour plus d'informations, consultez Spécifications de format.

Nombre de caractères écrits, ou –1 si une erreur s'est produite. Si buffer ou format est un pointeur null, le Gestionnaire de paramètre non valide est appelé, 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.

sprintf retourne le nombre d'octets stockés dans buffer, sans compter le caractère null de fin. swprintfRetourne le nombre de caractères larges stockés dans buffer, sans compter le caractère large null de fin.

La fonction sprintf met en forme une série de caractères et de valeurs et la stocke dans buffer. Chaque argument (le cas échéant) est converti et sorti selon la spécification de format correspondante dans format. Le format se compose de caractères ordinaires et a la même forme et fonction que l'argument format pour printf. 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.

System_CAPS_ICON_important.jpg Important

En utilisant sprintf, il n'existe aucun moyen de limiter le nombre de caractères écrits, ce qui signifie que le code qui utilise sprintf s'expose à des dépassements de mémoire tampon. Envisagez d’utiliser la fonction related _snprintf, qui spécifie un nombre maximal de caractères à écrire dans buffer, ou utilisez _scprintf pour déterminer la taille une mémoire tampon est requise. De même, assurez-vous que format n'est pas une chaîne définie par l'utilisateur.

swprintf est une version à caractères larges de sprintf ; les arguments de pointeur de swprintf sont des chaînes à caractères larges. La détection d'erreurs d'encodage dans swprintf peut différer de celle dans sprintf. swprintf et fwprintf se comportent de façon identique, sauf que swprintf écrit la sortie dans une chaîne au lieu d'une destination de type FILE, et que swprintf 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.

swprintf 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éfinissez _CRT_NON_CONFORMING_SWPRINTFS. Sachant que l'ancien comportement risque d'être retiré dans une version ultérieure, il est conseillé de modifier le code 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
_stprintfsprintfsprintf_swprintf
_stprintf_l_sprintf_l_sprintf_l__swprintf_l
RoutineEn-tête requis
sprintf, _sprintf_l<stdio.h>
swprintf, _swprintf_l<stdio.h> ou <wchar.h>

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

// crt_sprintf.c  
// compile with: /W3  
// This program uses sprintf 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( buffer,     "   String:    %s\n", s ); // C4996  
   j += sprintf( buffer + j, "   Character: %c\n", c ); // C4996  
   j += sprintf( buffer + j, "   Integer:   %d\n", i ); // C4996  
   j += sprintf( buffer + j, "   Real:      %f\n", fp );// C4996  
   // Note: sprintf is deprecated; consider using sprintf_s instead  
  
   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );  
}  

Output:  
   String:    computer  
   Character: l  
   Integer:   35  
   Real:      1.732053  
  
character count = 79  

// crt_swprintf.c  
// wide character example  
// also demonstrates swprintf returning error code  
#include <stdio.h>  
  
int main( void )  
{  
   wchar_t buf[100];  
   int len = swprintf( buf, 100, L"%s", L"Hello world" );  
   printf( "wrote %d characters\n", len );  
   len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );  
   // swprintf fails because string contains WEOF (\xffff)  
   printf( "wrote %d characters\n", len );  
}  

wrote 11 characters  
wrote -1 characters  

System::String::format

Flux d’e/s
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
Fonctions vprintf

Afficher: