printf_s, _printf_s_l, wprintf_s, _wprintf_s_l

Mencetak output yang diformat ke aliran output standar. Versi , , ,wprintf_wprintf_lini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT. _printf_lprintf

Sintaks

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]...
);

Parameter

format
Kontrol format.

argument
Argumen opsional.

locale
Lokal yang akan digunakan.

Nilai hasil

Mengembalikan jumlah karakter yang dicetak, atau nilai negatif jika terjadi kesalahan.

Keterangan

Fungsi memformat printf_s dan mencetak serangkaian karakter dan nilai ke aliran output standar, stdout. Jika argumen mengikuti format string, format string harus berisi spesifikasi yang menentukan format output untuk argumen.

Perbedaan utama antara printf_s dan printf adalah memeriksa string format untuk karakter pemformatan yang printf_s valid, sedangkan printf hanya memeriksa apakah string format adalah penunjuk null. Jika salah satu pemeriksaan gagal, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi mengembalikan -1 dan diatur errno ke EINVAL.

Untuk informasi tentang errno kode kesalahan dan , lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

printf_s dan fprintf_s berulah identik kecuali yang printf_s menulis output ke stdout bukan ke tujuan jenis FILE. Untuk informasi selengkapnya, lihat fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l.

wprintf_s adalah versi karakter yang luas dari printf_s; format adalah string karakter lebar. wprintf_s dan printf_s bersifat identik jika aliran dibuka dalam mode ANSI. printf_s saat ini tidak mendukung output ke dalam aliran UNICODE.

Versi fungsi-fungsi ini dengan _l akhiran identik kecuali mereka menggunakan parameter lokal yang diteruskan alih-alih lokal utas saat ini.

Pemetaan rutin teks generik

TCHAR.H Rutin _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_tprintf_s printf_s printf_s wprintf_s
_tprintf_s_l _printf_s_l _printf_s_l _wprintf_s_l

Argumen format terdiri dari karakter biasa, urutan escape, dan (jika argumen mengikuti format) spesifikasi format. Karakter biasa dan urutan escape disalin untuk stdout dalam urutan penampilan mereka. Misalnya, baris

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

menghasilkan output

Line one
        Line two

Spesifikasi format selalu dimulai dengan tanda persen (%) dan dibaca dari kiri ke kanan. Ketika printf_s menemukan spesifikasi format pertama (jika ada), ia mengonversi nilai argumen pertama setelah format dan menghasilkannya. Spesifikasi format kedua menyebabkan argumen kedua dikonversi dan output, dan sebagainya. Jika ada lebih banyak argumen daripada spesifikasi format, argumen tambahan diabaikan. Hasilnya tidak terdefinisi jika tidak ada cukup argumen untuk semua spesifikasi format.

Penting

Pastikan itu format bukan string yang ditentukan pengguna.

Mulai Windows 10 versi 2004 (build 19041), printf keluarga fungsi mencetak angka titik mengambang yang persis dapat diwakili sesuai dengan aturan IEEE 754 untuk pembulatan. Di versi Windows sebelumnya, angka titik pecahan yang persis dapat diwakili yang berakhiran '5' akan selalu dibulatkan. IEEE 754 menyatakan bahwa mereka harus membulatkan ke digit terdekat bahkan (juga dikenal sebagai "Pembulatan Bankir"). Misalnya, dan printf("%1.0f", 1.5)printf("%1.0f", 2.5) harus membulatkan ke 2. Sebelumnya, 1,5 akan membulatkan ke 2 dan 2,5 akan dibulatkan ke 3. Perubahan ini hanya memengaruhi angka yang tepat yang dapat diwakili. Misalnya, 2,35 (yang, ketika diwakili dalam memori, lebih dekat ke 2,3500000000000000008) terus membulatkan ke atas hingga 2,4. Pembulatan yang dilakukan oleh fungsi-fungsi ini sekarang juga menghormati mode pembulatan titik mengambang yang ditetapkan oleh fesetround. Sebelumnya, pembulatan selalu memilih FE_TONEAREST perilaku. Perubahan ini hanya memengaruhi program yang dibuat menggunakan Visual Studio 2019 versi 16.2 dan yang lebih baru. Untuk menggunakan perilaku pembulatan titik mengambang warisan, tautkan dengan legacy_stdio_float_rounding.obj.

Persyaratan

Rutin Header yang diperlukan
printf_s, _printf_s_l <stdio.h>
wprintf_s, _wprintf_s_l <stdio.h> atau <wchar.h>

Konsol tidak didukung di aplikasi Platform Windows Universal (UWP). Handel aliran standar yang terkait dengan konsol, , stdin, stdoutdan stderr, harus dialihkan sebelum fungsi run-time C dapat menggunakannya di aplikasi UWP. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Konsol tidak didukung di aplikasi Platform Windows Universal (UWP). Handel aliran standar yang terkait dengan konsol, , stdin, stdoutdan stderr, harus dialihkan sebelum fungsi run-time C dapat menggunakannya di aplikasi UWP. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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);

}

Sampel 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

Baca juga

Dukungan matematika dan titik mengambang
Streaming I/O
Lokal
fopen, _wfopen
fprintf, _fprintf_l, fwprintf, _fwprintf_l
scanf, _scanf_l, wscanf, _wscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vprintf Fungsi