printf_s, _printf_s_l, wprintf_s, _wprintf_s_lprintf_s, _printf_s_l, wprintf_s, _wprintf_s_l

Imprime une sortie mise en forme dans le flux de sortie standard.Prints formatted output to the standard output stream. Ces versions de printf, _printf_l, wprintf, _wprintf_l intègrent les améliorations de sécurité décrites dans Fonctionnalités de sécurité dans le CRT.These versions of printf, _printf_l, wprintf, _wprintf_l have security enhancements, as described in Security Features in the CRT.

SyntaxeSyntax

int printf_s(
   const char *format [,
   argument]...
);
int _printf_s_l(
   const char *format,
   locale_t locale [,
   argument]...
);
int wprintf_s(
   const wchar_t *format [,
   argument]...
);
int _wprintf_s_l(
   const wchar_t *format,
   locale_t locale [,
   argument]...
);

ParamètresParameters

formatformat
Contrôle de format.Format control.

argumentargument
Arguments facultatifs.Optional arguments.

localelocale
Paramètres régionaux à utiliser.The locale to use.

Valeur de retourReturn Value

Retourne le nombre de caractères imprimés ou une valeur négative si une erreur se produit.Returns the number of characters printed, or a negative value if an error occurs.

NotesRemarks

La fonction printf_s met en forme et imprime une série de caractères et de valeurs dans le flux de sortie standard, stdout.The printf_s function formats and prints a series of characters and values to the standard output stream, stdout. Si les arguments suivent la chaîne de format , la chaîne de format doit contenir des spécifications qui déterminent le format de sortie des arguments.If arguments follow the format string, the format string must contain specifications that determine the output format for the arguments.

La principale différence entre printf_s et printf est que printf_s vérifie la chaîne de format pour les caractères de mise en forme valides, tandis que printf vérifie uniquement si la chaîne de format est un pointeur null.The main difference between printf_s and printf is that printf_s checks the format string for valid formatting characters, whereas printf only checks if the format string is a null pointer. Si l’une des vérifications échoue, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre.If either check fails, an invalid parameter handler is invoked, as described in Parameter Validation. Si l’exécution est autorisée à se poursuivre, la fonction retourne-1 et définit errno sur EINVAL.If execution is allowed to continue, the function returns -1 and sets errno to EINVAL.

Pour plus d’informations sur les codes d’erreur et errno , consultez _doserrno, errno, _sys_errlist et _sys_nerr.For information on errno and error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

printf_s et fprintf_s se comportent de la même manière, sauf que printf_s écrit la sortie dans stdout plutôt que dans une destination de type file.printf_s and fprintf_s behave identically except that printf_s writes output to stdout rather than to a destination of type FILE. Pour plus d’informations, consultez fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l.For more information, see fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l.

wprintf_s est une version à caractères larges de printf_s; le format est une chaîne de caractères larges.wprintf_s is a wide-character version of printf_s; format is a wide-character string. wprintf_s et printf_s se comportent de la même manière si le flux est ouvert en mode ANSI.wprintf_s and printf_s behave identically if the stream is opened in ANSI mode. printf_s ne prend pas actuellement en charge la sortie dans un flux Unicode.printf_s doesn't currently support output into a UNICODE stream.

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.The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

Mappages de routines de texte génériqueGeneric-Text Routine Mappings

Routine TCHAR.HTCHAR.H routine _UNICODE et _MBCS non définis_UNICODE & _MBCS not defined _MBCS défini_MBCS defined _unicode défini_unicode defined
_tprintf_s_tprintf_s printf_sprintf_s printf_sprintf_s wprintf_swprintf_s
_tprintf_s_l_tprintf_s_l _printf_s_l_printf_s_l _printf_s_l_printf_s_l _wprintf_s_l_wprintf_s_l

L’argument de format se compose de caractères ordinaires, de séquences d’échappement et de spécifications de format (si les arguments suivent le format).The format argument consists of ordinary characters, escape sequences, and (if arguments follow format) format specifications. Les caractères ordinaires et les séquences d’échappement sont copiés dans stdout dans l’ordre de leur apparence.The ordinary characters and escape sequences are copied to stdout in order of their appearance. Par exemple, la ligneFor example, the line

printf_s("Line one\n\t\tLine two\n");

génère la sortieproduces the output

Line one
        Line two

Les spécifications de format commencent toujours par un signe % de pourcentage () et sont lues de gauche à droite.Format specifications always begin with a percent sign (%) and are read left to right. Quand printf_s rencontre la première spécification de format (le cas échéant), il convertit la valeur du premier argument après le format et la génère en conséquence.When printf_s encounters the first format specification (if any), it converts the value of the first argument after format and outputs it accordingly. La deuxième spécification de format entraîne la conversion et la sortie du deuxième argument, et ainsi de suite.The second format specification causes the second argument to be converted and output, and so on. S’il y a plus d’arguments que de spécifications de format, les arguments en trop sont ignorés.If there are more arguments than there are format specifications, the extra arguments are ignored. Les résultats sont indéfinis s’il n’y a pas assez d’arguments pour toutes les spécifications de format.The results are undefined if there are not enough arguments for all the format specifications.

Important

Assurez-vous que format n'est pas une chaîne définie par l'utilisateur.Ensure that format is not a user-defined string.

Configuration requiseRequirements

RoutineRoutine En-tête requisRequired header
printf_s, _printf_s_lprintf_s, _printf_s_l <stdio.h><stdio.h>
wprintf_s, _wprintf_s_lwprintf_s, _wprintf_s_l <stdio.h> ou <wchar.h><stdio.h> or <wchar.h>

La console n’est pas prise en charge dans les applications de plateforme Windows universelle (UWP).The console is not supported in Universal Windows Platform (UWP) apps. Les handles de flux standard associés à la console, stdin, stdoutet stderr, doivent être redirigés pour que les fonctions runtime C puissent les utiliser dans les applications UWP.The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. Pour plus d'informations sur la compatibilité, voir Compatibilité.For additional compatibility information, see Compatibility.

ExempleExample

// crt_printf_s.c
/* This program uses the printf_s and wprintf_s functions
* to produce formatted output.
*/

#include <stdio.h>

int main( void )
{
   char   ch = 'h', *string = "computer";
   int    count = -9234;
   double fp = 251.7366;
   wchar_t wch = L'w', *wstring = L"Unicode";

   /* Display integers. */
   printf_s( "Integer formats:\n"
           "   Decimal: %d  Justified: %.6d  Unsigned: %u\n",
           count, count, count );

   printf_s( "Decimal %d as:\n   Hex: %Xh  C hex: 0x%x  Octal: %o\n",
            count, count, count, count );

   /* Display in different radixes. */
   printf_s( "Digits 10 equal:\n   Hex: %i  Octal: %i  Decimal: %i\n",
            0x10, 010, 10 );

   /* Display characters. */

   printf_s("Characters in field (1):\n%10c%5hc%5C%5lc\n", ch, ch, wch, wch);
   wprintf_s(L"Characters in field (2):\n%10C%5hc%5c%5lc\n", ch, ch, wch, wch);

   /* Display strings. */

   printf_s("Strings in field (1):\n%25s\n%25.4hs\n   %S%25.3ls\n",
   string, string, wstring, wstring);
   wprintf_s(L"Strings in field (2):\n%25S\n%25.4hs\n   %s%25.3ls\n",
       string, string, wstring, wstring);

   /* Display real numbers. */
   printf_s( "Real numbers:\n   %f %.2f %e %E\n", fp, fp, fp, fp );

   /* Display pointer. */
   printf_s( "\nAddress as:   %p\n", &count);

}

Résultat de l'exempleSample Output

Integer formats:
   Decimal: -9234  Justified: -009234  Unsigned: 4294958062
Decimal -9234 as:
   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756
Digits 10 equal:
   Hex: 16  Octal: 8  Decimal: 10
Characters in field (1):
         h    h    w    w
Characters in field (2):
         h    h    w    w
Strings in field (1):
                 computer
                     comp
   Unicode                      Uni
Strings in field (2):
                 computer
                     comp
   Unicode                      Uni
Real numbers:
   251.736600 251.74 2.517366e+002 2.517366E+002

Address as:   0012FF78

Voir aussiSee also

Prise en charge de la virgule flottanteFloating-Point Support
E/S de fluxStream I/O
Paramètres régionauxLocale
fopen, _wfopenfopen, _wfopen
fprintf, _fprintf_l, fwprintf, _fwprintf_lfprintf, _fprintf_l, fwprintf, _fwprintf_l
scanf, _scanf_l, wscanf, _wscanf_lscanf, _scanf_l, wscanf, _wscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vprintf, fonctionsvprintf Functions