_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l

Tulis output yang diformat menggunakan penunjuk ke daftar argumen, dengan kemampuan untuk menentukan urutan di mana argumen digunakan.

Sintaks

int _vsprintf_p(
   char *buffer,
   size_t sizeInBytes,
   const char *format,
   va_list argptr
);
int _vsprintf_p_l(
   char *buffer,
   size_t sizeInBytes,
   const char *format,
   _locale_t locale,
   va_list argptr
);
int _vswprintf_p(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   va_list argptr
);
int _vswprintf_p_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   _locale_t locale,
   va_list argptr
);

Parameter

buffer
Lokasi penyimpanan untuk output.

sizeInBytes
buffer Ukuran dalam karakter.

count
Jumlah maksimum karakter yang akan disimpan, dalam versi UNICODE dari fungsi ini.

format
Spesifikasi format.

argptr
Penunjuk ke daftar argumen.

locale
Lokal yang akan digunakan.

Nilai hasil

_vsprintf_p dan _vswprintf_p mengembalikan jumlah karakter yang ditulis, tidak termasuk karakter null yang mengakhiri, atau nilai negatif jika terjadi kesalahan output.

Keterangan

Masing-masing fungsi ini mengambil penunjuk ke daftar argumen, lalu memformat dan menulis data yang diberikan ke memori yang ditujukkan oleh buffer.

Fungsi-fungsi ini berbeda dari vsprintf_s dan vswprintf_s hanya karena fungsi tersebut mendukung parameter posisi. Untuk informasi selengkapnya, lihat Parameter Posisi printf_p.

Versi fungsi-fungsi ini dengan _l akhiran identik kecuali mereka menggunakan parameter lokal yang diteruskan alih-alih lokal utas saat ini.

buffer Jika parameter atau format adalah NULL penunjuk, jika hitungan adalah 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.

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. Rutinitas H _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_vstprintf_p _vsprintf_p _vsprintf_p _vswprintf_p
_vstprintf_p_l _vsprintf_p_l _vsprintf_p_l _vswprintf_p_l

Persyaratan

Rutin Header yang diperlukan Header opsional
_vsprintf_p, _vsprintf_p_l <stdio.h> dan <stdarg.h> <varargs.h>*
_vswprintf_p, _vswprintf_p_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_p.c
// This program uses vsprintf_p to write to a buffer.
// The size of the buffer is determined by _vscprintf_p.

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>

void example( char * format, ... )
{
    va_list  args;
    int      len;
    char     *buffer = NULL;

    va_start( args, format );

    // _vscprintf doesn't count the
    // null terminating string so we add 1.
    len = _vscprintf_p( format, args ) + 1;

    // Allocate memory for our buffer
    buffer = (char*)malloc( len * sizeof(char) );
    if (buffer)
    {
        _vsprintf_p( buffer, len, format, args );
        puts( buffer );
        free( buffer );
    }
    va_end( args );
}

int main( void )
{
    // First example
    example( "%2$d %1$c %3$d", '<', 123, 456 );

    // Second example
    example( "%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