Share via


sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l

Écrire des données mises en forme dans une chaîne. Il s'agit de versions de sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l avec des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le CRT.

int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
   argument] ... 
);
int _sprintf_s_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int swprintf_s(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format [,
   argument]...
);
int _swprintf_s_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   locale_t locale [,
   argument]…
);
template <size_t size>
int sprintf_s(
   char (&buffer)[size],
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int swprintf_s(
   wchar_t (&buffer)[size],
   const wchar_t *format [,
   argument]...
); // C++ only

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
    Arguments facultatifs

  • locale
    Paramètres régionaux à utiliser.

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

Valeur de retour

Nombre de caractères écrits, ou –1 si une erreur s'est produite. Si buffer ou format est un pointeur null, sprintf_s et swprintf_s retournent -1 et affectent la valeur EINVAL à errno.

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

Notes

La fonction sprintf_s 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.

L'une des principales différences entre sprintf_s et sprintf est que sprintf_s vérifie si la chaîne de format comporte des caractères de mise en forme valides, tandis que sprintf vérifie uniquement si la chaîne de format ou la mémoire tampon est un pointeur NULL. Si l'une ou l'autre vérification échoue, 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, la fonction retourne -1 et définit errno avec la valeur EINVAL.

L'autre différence principale entre sprintf_s et sprintf est que sprintf_s prend un paramètre de longueur spécifiant la taille de la mémoire tampon de sortie en caractères. Si la mémoire tampon est trop petite pour le texte imprimé, elle est définie sur une chaîne vide et le gestionnaire de paramètre non valide est appelé. Contrairement à snprintf, sprintf_s garantit que la mémoire tampon se termine par null (à moins que la taille de la mémoire tampon soit égale à zéro).

swprintf_s est une version à caractères larges de sprintf_s ; les arguments de pointeur de swprintf_s sont des chaînes à caractères larges. La détection d'erreurs d'encodage dans swprintf_s peut différer de celle dans sprintf_s. 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.

En C++, l'utilisation de ces fonctions est simplifiée par les surcharges de modèle ; les surcharges peuvent déduire la longueur de la mémoire tampon automatiquement (ce qui évite d'avoir à spécifier un argument taille) et peuvent remplacer automatiquement les fonctions plus anciennes et non sécurisées par leurs équivalentes plus récentes et sécurisées. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.

Il existe des versions de sprintf_s qui offrent un contrôle supplémentaire sur ce qui se produit si la mémoire tampon est trop petite. Pour plus d'informations, consultez _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l.

Mappages de routines de texte générique

Routine TCHAR.H

_UNICODE & _MBCS non définis

_MBCS défini

_UNICODE défini

_stprintf_s

sprintf_s

sprintf_s

swprintf_s

_stprintf_s_l

_sprintf_s_l

_sprintf_s_l

_swprintf_s_l

Configuration requise

Routine

En-tête requis

sprintf_s, _sprintf_s_l

<stdio.h>

swprintf_s, _swprintf_s_l

<stdio.h> ou <wchar.h>

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

Exemple

// crt_sprintf_s.c
// This program uses sprintf_s 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_s( buffer, 200,     "   String:    %s\n", s );
   j += sprintf_s( buffer + j, 200 - j, "   Character: %c\n", c );
   j += sprintf_s( buffer + j, 200 - j, "   Integer:   %d\n", i );
   j += sprintf_s( buffer + j, 200 - j, "   Real:      %f\n", fp );

   printf_s( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
  
// crt_swprintf_s.c
// wide character example
// also demonstrates swprintf_s returning error code
#include <stdio.h>

int main( void )
{
   wchar_t buf[100];
   int len = swprintf_s( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf_s( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf_s fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
  

Équivalent .NET Framework

System::String::Format

Voir aussi

Référence

E/S de flux

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