_sprintf_p
, _sprintf_p_l
, _swprintf_p
, _swprintf_p_l
Tulis data yang diformat ke string dengan kemampuan untuk menentukan urutan parameter yang digunakan dalam string format.
Sintaks
int _sprintf_p(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument_list]
);
int _sprintf_p_l(
char *buffer,
size_t sizeOfBuffer,
const char *format,
_locale_t locale [,
argument_list]
);
int _swprintf_p(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format [,
argument_list]
);
int _swprintf_p_l(
wchar_t *buffer,
size_t sizeOfBuffer,
const wchar_t *format,
_locale_t locale [,
argument_list]
);
Parameter
buffer
Lokasi penyimpanan untuk output
sizeOfBuffer
Jumlah karakter maksimum yang akan disimpan.
format
String kontrol format.
argument_list
Argumen opsional ke string format.
locale
Lokal yang akan digunakan.
Untuk informasi selengkapnya, lihat Sintaks spesifikasi format.
Nilai hasil
Jumlah karakter yang ditulis, atau -1 jika terjadi kesalahan.
Keterangan
Fungsi memformat _sprintf_p
dan menyimpan serangkaian karakter dan nilai di buffer
. Setiap argumen dalam (jika ada) dikonversi argument_list
dan output sesuai dengan spesifikasi format yang sesuai di format
. Argumen format
menggunakan sintaks spesifikasi format untuk printf
fungsi dan wprintf
. Karakter null ditambahkan setelah karakter terakhir ditulis. Jika penyalinan terjadi di antara string yang tumpang tindih, perilaku tidak terdefinisi. Perbedaan antara _sprintf_p
dan sprintf_s
adalah yang _sprintf_p
mendukung parameter posisi, yang memungkinkan menentukan urutan di mana argumen digunakan dalam string format. Untuk informasi selengkapnya, lihat printf_p
Parameter Posisi.
_swprintf_p
adalah versi _sprintf_p
karakter lebar ; argumen penunjuk untuk _swprintf_p
adalah string karakter lebar. Deteksi kesalahan pengodean mungkin _swprintf_p
berbeda dari deteksi di _sprintf_p
. _swprintf_p
dan fwprintf_p
berulah identik kecuali yang _swprintf_p
menulis output ke string daripada ke tujuan jenis FILE
, dan _swprintf_p
mengharuskan count
parameter untuk menentukan jumlah maksimum karakter yang akan ditulis. Versi fungsi-fungsi ini dengan _l
akhiran identik kecuali mereka menggunakan parameter lokal yang diteruskan alih-alih lokal utas saat ini.
_sprintf_p
mengembalikan jumlah byte yang disimpan dalam buffer
, tidak menghitung karakter null yang dihentikan. _swprintf_p
mengembalikan jumlah karakter lebar yang disimpan dalam buffer
, tidak menghitung karakter lebar null yang dihentikan. Jika buffer
atau format
adalah penunjuk null, atau jika string format berisi karakter pemformatan yang tidak valid, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini mengembalikan -1 dan diatur errno
ke EINVAL
.
Penting
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'.
Pemetaan rutin teks generik
TCHAR.H Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_stprintf_p |
_sprintf_p |
_sprintf_p |
_swprintf_p |
_stprintf_p_l |
_sprintf_p_l |
_sprintf_p_l |
_swprintf_p_l |
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_sprintf_p , _sprintf_p_l |
<stdio.h> |
_swprintf_p , _swprintf_p_l |
<stdio.h> atau <wchar.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh: Gunakan _sprintf_p
untuk memformat data
// crt_sprintf_p.c
// This program uses _sprintf_p 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_p( buffer, 200,
" String: %s\n", s );
j += _sprintf_p( buffer + j, 200 - j,
" Character: %c\n", c );
j += _sprintf_p( buffer + j, 200 - j,
" Integer: %d\n", i );
j += _sprintf_p( buffer + j, 200 - j,
" Real: %f\n", fp );
printf( "Output:\n%s\ncharacter count = %d\n",
buffer, j );
}
Output:
String: computer
Character: l
Integer: 35
Real: 1.732053
character count = 79
Contoh: Penanganan kode kesalahan
// crt_swprintf_p.c
// This is the wide character example which
// also demonstrates _swprintf_p returning
// error code.
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
wchar_t buffer[BUFFER_SIZE];
int len;
len = _swprintf_p(buffer, BUFFER_SIZE, L"%2$s %1$d",
0, L" marbles in your head.");
_printf_p( "Wrote %d characters\n", len );
// _swprintf_p fails because string contains WEOF (\xffff)
len = _swprintf_p(buffer, BUFFER_SIZE, L"%s",
L"Hello\xffff world" );
_printf_p( "Wrote %d characters\n", len );
}
Wrote 24 characters
Wrote -1 characters
Baca juga
Streaming I/O
_fprintf_p
, _fprintf_p_l
, _fwprintf_p
, _fwprintf_p_l
fprintf
, _fprintf_l
, fwprintf
, _fwprintf_l
_printf_p
, _printf_p_l
, _wprintf_p
, _wprintf_p_l
printf
, _printf_l
, wprintf
, _wprintf_l
sprintf
, _sprintf_l
, swprintf
, _swprintf_l
, __swprintf_l
scanf
, _scanf_l
, wscanf
, _wscanf_l
sscanf
, _sscanf_l
, swscanf
, _swscanf_l
sscanf_s
, _sscanf_s_l
, swscanf_s
, _swscanf_s_l
vprintf
Fungsi
printf_p
Parameter Posisi
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