Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 snprintfterkait , 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 sprintfkarakter 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_SWPRINTFSpanggilan 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_lfwprintf,_fwprintf_l
printf, , _printf_lwprintf,_wprintf_l
scanf, , _scanf_lwscanf,_wscanf_l
sscanf, , _sscanf_lswscanf,_swscanf_l
vprintf Fungsi