Dela via


_cprintf_s, _cprintf_s_l, , _cwprintf_s_cwprintf_s_l

Formaterar och skriver ut till konsolen. Dessa versioner av _cprintf, _cprintf_l, _cwprintf, _cwprintf_l har säkerhetsförbättringar enligt beskrivningen i Säkerhetsfunktioner i CRT.

Viktigt!

Det här API:et kan inte användas i program som körs i Windows Runtime. Mer information finns i CRT-funktioner som inte stöds i Universella Windows Platform-appar.

Syntax

int _cprintf_s(
   const char * format [,
   argument] ...
);
int _cprintf_s_l(
   const char * format,
   _locale_t locale [,
   argument] ...
);
int _cwprintf_s(
   const wchar * format [,
   argument] ...
);
int _cwprintf_s_l(
   const wchar * format,
   _locale_t locale [,
   argument] ...
);

Parameterar

format
Formatkontrollsträng.

argument
Valfria parametrar.

locale
Språkvarianten som ska användas.

Returvärde

Antalet tecken som skrivs ut.

Anmärkningar

Dessa funktioner formaterar och skriver ut en serie tecken och värden direkt till konsolen med hjälp av _putch funktionen (_putwch för ) för _cwprintf_satt mata ut tecken. Varje argument (om någon) konverteras och utdata enligt motsvarande formatspecifikation i format. Formatet har samma formulär och funktion som parametern formatprintf_s för funktionen. fprintf_sTill skillnad från funktionerna _cprintf_s , printf_soch sprintf_s och _cwprintf_s översätter inte radmatningstecken till vagnreturlinjematning (CR-LF) kombinationer vid utdata.

En viktig skillnad är att _cwprintf_s visar Unicode-tecken när de används i Windows NT. Till skillnad från _cprintf_sanvänder _cwprintf_s använder den aktuella konsolspråket

Versionerna av dessa funktioner med suffixet _l är identiska förutom att de använder språkparametern som skickas i stället för det aktuella språket.

Viktigt!

Kontrollera att det format inte är en användardefinierad sträng.

Från och med Windows 10 version 2004 (version 19041) skriver funktionsfamiljen printf ut exakt representerande flyttalsnummer enligt IEEE 754-reglerna för avrundning. I tidigare versioner av Windows skulle exakt representerande flyttalsnummer som slutar på "5" alltid avrunda uppåt. IEEE 754 anger att de måste avrunda till den närmaste jämna siffran (även kallat "Bankers avrundning"). Till exempel bör både printf("%1.0f", 1.5) och printf("%1.0f", 2.5) avrunda till 2. Tidigare skulle 1,5 avrunda till 2 och 2,5 skulle avrunda till 3. Den här ändringen påverkar endast exakt representerande tal. Till exempel fortsätter 2.35 (som, när det representeras i minnet, är närmare 2.3500000000000000008) att avrunda upp till 2,4. Avrundning som utförs av dessa funktioner respekterar nu också flyttalsrundningsläget som anges av fesetround. Tidigare valde FE_TONEAREST avrundning alltid beteende. Den här ändringen påverkar endast program som skapats med Visual Studio 2019 version 16.2 och senare. Om du vill använda det äldre avrundningsbeteendet för flyttalser länkar du till legacy_stdio_float_rounding.obj.

Precis som de icke-säkra versionerna (se _cprintf, _cprintf_l, _cwprintf, _cwprintf_l) verifierar dessa funktioner sina parametrar och anropar den ogiltiga parameterhanteraren, enligt beskrivningen i Parameterverifiering, om format är en null-pekare. Dessa funktioner skiljer sig från de icke-säkra versionerna eftersom själva formatsträngen också verifieras. Om det finns några okända eller felaktigt formateringsspecificerare anropar dessa funktioner den ogiltiga parameterhanteraren. Om körningen tillåts fortsätta returnerar funktionerna i alla fall -1 och är inställda errnoEINVAL.

Allmän textrutinmappning

Tchar.h-rutin _UNICODE och _MBCS inte definierad _MBCS definierad _UNICODE definierad
_tcprintf_s _cprintf_s _cprintf_s _cwprintf_s
_tcprintf_s_l _cprintf_s_l _cprintf_s_l _cwprintf_s_l

Kravspecifikation

Rutin Obligatoriskt huvud
_cprintf_s, _cprintf_s_l <conio.h>
_cwprintf_s, _cwprintf_s_l <conio.h>

Mer kompatibilitetsinformation finns i Kompatibilitet.

Bibliotek

Alla versioner av C-körningsbibliotek.

Exempel

// crt_cprintf_s.c
// This program displays some variables to the console.

#include <conio.h>

int main( void )
{
   int      i = -16, h = 29;
   unsigned u = 62511;
   char     c = 'A';
   char     s[] = "Test";

   /* Note that console output does not translate \n as
    * standard output does. Use \r\n instead.
    */
   _cprintf_s( "%d  %.4x  %u  %c %s\r\n", i, h, u, c, s );
}
-16  001d  62511  A Test

Se även

-konsolen och port-I/O-
_cscanf, _cscanf_l, , _cwscanf_cwscanf_l
fprintf_s, _fprintf_s_l, , fwprintf_s_fwprintf_s_l
printf_s, _printf_s_l, , wprintf_s_wprintf_s_l
sprintf_s, _sprintf_s_l, , swprintf_s_swprintf_s_l
vfprintf_s, _vfprintf_s_l, , vfwprintf_s_vfwprintf_s_l
Syntax för formatspecifikation: printf och wprintf funktioner