Bagikan melalui


sprintf, , _sprintf_lswprintf, _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 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 _swprintfswprintf . 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