printf_s
, _printf_s_l
, wprintf_s
, _wprintf_s_l
Mencetak output yang diformat ke aliran output standar. Versi , , ,wprintf
_wprintf_l
ini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT. _printf_l
printf
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
, stdout
dan 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
, stdout
dan 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk