_vcprintf_s, _vcprintf_s_l, _vcwprintf_s, _vcwprintf_s_l

Menulis output berformat ke konsol dengan menggunakan penunjuk ke daftar argumen. Versi , , ,_vcwprintf_vcwprintf_lini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT. _vcprintf_l_vcprintf

Penting

API ini tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime. Untuk informasi selengkapnya, lihat Fungsi CRT yang tidak didukung di aplikasi Platform Windows Universal.

Sintaks

int _vcprintf_s(
   char const* const format,
   va_list argptr
);
int _vcprintf_s_l(
   char const* const format,
   _locale_t locale,
   va_list argptr
);
int _vcwprintf_s(
   wchar_t const* const format,
   va_list argptr
);
int _vcwprintf_s_l(
   wchar_t const* const format,
   _locale_t locale,
   va_list argptr
);

Parameter

format
Spesifikasi format.

argptr
Penunjuk ke daftar argumen.

locale
Lokal yang akan digunakan.

Untuk informasi selengkapnya, lihat Sintaks spesifikasi format: printf dan wprintf fungsi.

Nilai hasil

Jumlah karakter yang ditulis, atau nilai negatif jika terjadi kesalahan output.

Seperti versi fungsi-fungsi ini yang kurang aman, jika format adalah penunjuk null, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Selain itu, tidak seperti versi fungsi-fungsi ini yang kurang aman, jika format tidak menentukan format yang valid, pengecualian parameter yang tidak valid dihasilkan. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini mengembalikan kode kesalahan dan diatur errno ke kode kesalahan tersebut. Kode kesalahan default adalah EINVAL jika nilai yang lebih spesifik tidak berlaku.

Keterangan

Masing-masing fungsi ini mengambil penunjuk ke daftar argumen, lalu memformat dan menulis data yang diberikan ke konsol. _vcwprintf_s adalah versi karakter luas dari _vcprintf_s. Dibutuhkan string karakter lebar sebagai argumen.

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

Penting

Pastikan itu format bukan string yang ditentukan pengguna. Untuk informasi selengkapnya, lihat Menghindari overruns buffer.

Pemetaan rutin teks generik

TCHAR. Rutinitas H _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_vtcprintf_s _vcprintf_s _vcprintf_s _vcwprintf_s
_vtcprintf_s_l _vcprintf_s_l _vcprintf_s_l _vcwprintf_s_l

Persyaratan

Rutin Header yang diperlukan Header opsional
_vcprintf_s, _vcprintf_s_l <conio.h> dan <stdarg.h> <varargs.h>*
_vcwprintf_s, _vcwprintf_s_l <conio.h> atau <wchar.h>, dan <stdarg.h> <varargs.h>*

* Diperlukan untuk kompatibilitas UNIX V.

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

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.

Contoh

// crt_vcprintf_s.cpp
#include <conio.h>
#include <stdarg.h>

// An error formatting function used to print to the console.
int eprintf_s(const char* format, ...)
{
    va_list args;
    va_start(args, format);
    int result = _vcprintf_s(format, args);
    va_end(args);
    return result;
}

int main()
{
    eprintf_s("(%d:%d): Error %s%d : %s\n", 10, 23, "C", 2111,
              "<some error text>");
    eprintf_s("    (Related to symbol '%s' defined on line %d).\n",
              "<symbol>", 5 );
}
(10,23): Error C2111 : <some error text>
    (Related to symbol '<symbol>' defined on line 5).

Baca juga

Streaming I/O
vprintf Fungsi
_cprintf, _cprintf_l, _cwprintf, _cwprintf_l
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