sprintf
, , _sprintf_l
swprintf
, _swprintf
, , _swprintf_l
,__swprintf_l
Tulis data yang diformat ke string. Versi yang lebih aman dari beberapa fungsi ini tersedia; lihat sprintf_s
, _sprintf_s_l
, swprintf_s
, . _swprintf_s_l
Versi swprintf
aman dan _swprintf_l
mengambil ukuran buffer sebagai parameter.
Sintaks
int sprintf(
char *buffer,
const char *format [,
argument] ...
);
int _sprintf_l(
char *buffer,
const char *format,
_locale_t locale [,
argument] ...
);
int swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
);
int _swprintf(
wchar_t *buffer,
const wchar_t *format [,
argument]...
);
int _swprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
_locale_t locale [,
argument] ...
);
int __swprintf_l(
wchar_t *buffer,
const wchar_t *format,
_locale_t locale [,
argument] ...
);
template <size_t size>
int sprintf(
char (&buffer)[size],
const char *format [,
argument] ...
); // C++ only
template <size_t size>
int _sprintf_l(
char (&buffer)[size],
const char *format,
_locale_t locale [,
argument] ...
); // C++ only
Parameter
buffer
Lokasi penyimpanan untuk output
count
Jumlah karakter maksimum yang akan disimpan dalam versi Unicode fungsi ini.
format
String kontrol format
argument
Argumen opsional
locale
Lokal yang akan digunakan.
Untuk informasi selengkapnya, lihat Sintaks spesifikasi format.
Nilai hasil
Jumlah karakter yang ditulis, atau -1 jika terjadi kesalahan. Jika buffer
atau format
adalah penunjuk null, 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
.
sprintf
mengembalikan jumlah byte yang disimpan dalam buffer
, tidak menghitung karakter null yang dihentikan. swprintf
mengembalikan jumlah karakter lebar yang disimpan dalam buffer
, tidak menghitung karakter lebar null yang dihentikan.
Keterangan
Fungsi memformat sprintf
dan menyimpan serangkaian karakter dan nilai di buffer
. Masing-masing argument
(jika ada) dikonversi dan output sesuai dengan spesifikasi format yang sesuai di format
. Format terdiri dari karakter biasa dan memiliki bentuk dan fungsi yang sama dengan format
argumen untuk printf
. Karakter null ditambahkan setelah karakter terakhir ditulis. Jika penyalinan terjadi di antara string yang tumpang tindih, perilaku tidak terdefinisi.
Penting
Menggunakan sprintf
, tidak ada cara untuk membatasi jumlah karakter yang ditulis, yang berarti kode yang menggunakan sprintf
rentan terhadap overrun buffer. Pertimbangkan untuk menggunakan fungsi snprintf
terkait , yang menentukan jumlah karakter maksimum untuk ditulis ke buffer
, atau gunakan _scprintf
untuk menentukan seberapa besar buffer yang diperlukan. Selain itu, 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'.
swprintf
adalah versi sprintf
karakter lebar ; argumen penunjuk untuk swprintf
adalah string karakter lebar. Deteksi kesalahan pengodean mungkin swprintf
berbeda dari sprintf
. swprintf
dan fwprintf
berulah identik kecuali swprintf
menulis output ke string daripada ke tujuan jenis FILE
, dan swprintf
memerlukan 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.
Sebelum tanda tangan untuk swprintf
distandarkan, versi yang dikirim di pustaka runtime Microsoft C yang lebih lama yang tidak mengambil parameter jumlah karakter. Versi lama masih tersedia di pustaka runtime Microsoft C, tetapi tidak digunakan lagi dan diganti namanya _swprintf()
. Untuk kode yang ditulis terhadap tanda tangan yang lebih lama, tentukan , yang memetakan _CRT_NON_CONFORMING_SWPRINTFS
panggilan ke _swprintf
swprintf
. Dalam versi mendatang, perilaku lama dapat dihapus, sehingga kode harus diubah untuk menggunakan perilaku baru yang sesuai.
Di C++, fungsi-fungsi ini memiliki kelebihan beban templat yang memanggil rekan-rekan yang lebih baru dan aman dari fungsi-fungsi ini. Untuk informasi selengkapnya, lihat Mengamankan kelebihan beban templat.
Pemetaan rutin teks generik
TCHAR.H Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_stprintf |
sprintf |
sprintf |
_swprintf |
_stprintf_l |
_sprintf_l |
_sprintf_l |
__swprintf_l |
Persyaratan
Rutin | Header yang diperlukan |
---|---|
sprintf , _sprintf_l |
<stdio.h> |
swprintf , , _swprintf _swprintf_l |
<stdio.h> atau <wchar.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh: Gunakan sprintf
untuk memformat data
// crt_sprintf.c
// compile with: /W3
// This program uses sprintf 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( buffer, " String: %s\n", s ); // C4996
j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
// Note: sprintf is deprecated; consider using sprintf_s instead
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.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>
int main( void )
{
wchar_t buf[100];
int len = swprintf( buf, 100, L"%s", L"Hello world" );
printf( "wrote %d characters\n", len );
len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
// swprintf fails because string contains WEOF (\xffff)
printf( "wrote %d characters\n", len );
}
wrote 11 characters
wrote -1 characters
Lihat juga
Streaming I/O
fprintf
, , _fprintf_l
fwprintf
,_fwprintf_l
printf
, , _printf_l
wprintf
,_wprintf_l
scanf
, , _scanf_l
wscanf
,_wscanf_l
sscanf
, , _sscanf_l
swscanf
,_swscanf_l
vprintf
Fungsi