vsprintf_s
, _vsprintf_s_l
, vswprintf_s
, _vswprintf_s_l
Tulis output yang diformat menggunakan penunjuk ke daftar argumen. Fungsi-fungsi ini adalah versi vsprintf
, , _vsprintf_l
vswprintf
, _vswprintf_l
, '__vswprintf_l' dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
int vsprintf_s(
char *buffer,
size_t numberOfElements,
const char *format,
va_list argptr
);
int _vsprintf_s_l(
char *buffer,
size_t numberOfElements,
const char *format,
_locale_t locale,
va_list argptr
);
int vswprintf_s(
wchar_t *buffer,
size_t numberOfElements,
const wchar_t *format,
va_list argptr
);
int _vswprintf_s_l(
wchar_t *buffer,
size_t numberOfElements,
const wchar_t *format,
_locale_t locale,
va_list argptr
);
template <size_t size>
int vsprintf_s(
char (&buffer)[size],
const char *format,
va_list argptr
); // C++ only
template <size_t size>
int vswprintf_s(
wchar_t (&buffer)[size],
const wchar_t *format,
va_list argptr
); // C++ only
Parameter
buffer
Lokasi penyimpanan untuk output.
numberOfElements
buffer
Ukuran dalam karakter.
format
Spesifikasi format.
argptr
Penunjuk ke daftar argumen.
locale
Lokal yang akan digunakan.
Nilai hasil
vsprintf_s
dan vswprintf_s
mengembalikan jumlah karakter yang ditulis, tidak termasuk karakter null yang mengakhiri, atau nilai negatif jika terjadi kesalahan output. Jika buffer
atau format
adalah penunjuk null, jika numberOfElements
nol, 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 mengembalikan -1 dan diatur errno
ke EINVAL
.
Untuk informasi tentang kode kesalahan ini dan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Keterangan
Masing-masing fungsi ini mengambil penunjuk ke daftar argumen, lalu memformat dan menulis data yang diberikan ke memori yang ditujukkan oleh buffer
.
vswprintf_s
sesuai dengan STANDAR ISO C untuk vswprintf
, yang memerlukan parameter kedua, count
, dari jenis size_t
.
Fungsi-fungsi ini berbeda dari versi yang tidak aman hanya karena versi aman mendukung parameter posisi. Untuk informasi selengkapnya, lihat printf_p
Parameter Posisi.
Versi fungsi-fungsi ini dengan _l
akhiran identik kecuali mereka menggunakan parameter lokal yang diteruskan alih-alih lokal utas saat ini.
Di C++, menggunakan fungsi-fungsi ini disederhanakan oleh kelebihan beban templat. Kelebihan beban dapat menyimpulkan panjang buffer secara otomatis, menghilangkan kebutuhan untuk menentukan argumen ukuran. Dan, mereka dapat secara otomatis mengganti fungsi yang tidak aman dengan rekan-rekan aman mereka. Untuk informasi selengkapnya, lihat Mengamankan kelebihan beban templat.
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 |
---|---|---|---|
_vstprintf_s |
vsprintf_s |
vsprintf_s |
vswprintf_s |
_vstprintf_s_l |
_vsprintf_s_l |
_vsprintf_s_l |
_vswprintf_s_l |
Persyaratan
Rutin | Header yang diperlukan | Header opsional |
---|---|---|
vsprintf_s , _vsprintf_s_l |
<stdio.h> dan <stdarg.h> |
<varargs.h>* |
vswprintf_s , _vswprintf_s_l |
<stdio.h> atau <wchar.h> , dan <stdarg.h> |
<varargs.h>* |
* Diperlukan untuk kompatibilitas UNIX V.
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_vsprintf_s.c
// Compile with: cl /W4 crt_vsprintf_s.c
// This program uses vsprintf_s to write to a buffer.
// The size of the buffer is determined by _vscprintf.
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void test( char const * const format, ... )
{
va_list args;
int len;
char * buffer;
va_start( args, format );
len = _vscprintf( format, args ) // _vscprintf doesn't count
+ 1; // terminating '\0'
buffer = (char *) malloc( len * sizeof(char) );
if ( NULL != buffer )
{
vsprintf_s( buffer, len, format, args );
puts( buffer );
free( buffer );
}
va_end( args );
}
int main( void )
{
test( "%d %c %d", 123, '<', 456 );
test( "%s", "This is a string" );
}
123 < 456
This is a string
Baca juga
Streaming I/O
vprintf
Fungsi
Sintaks spesifikasi format: printf
dan wprintf
fungsi
fprintf
, _fprintf_l
, fwprintf
, _fwprintf_l
printf
, _printf_l
, wprintf
, _wprintf_l
sprintf
, _sprintf_l
, swprintf
, _swprintf_l
, __swprintf_l
va_arg
, va_copy
, va_end
, va_start
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