vscanf_s
, vwscanf_s
Membaca data yang diformat dari aliran input standar. Versi vscanf
, vwscanf
ini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
int vscanf_s(
const char *format,
va_list arglist
);
int vwscanf_s(
const wchar_t *format,
va_list arglist
);
Parameter
format
Format string kontrol.
arglist
Daftar argumen variabel.
Nilai hasil
Mengembalikan jumlah bidang yang berhasil dikonversi dan ditetapkan; nilai pengembalian tidak menyertakan bidang yang dibaca tetapi tidak ditetapkan. Nilai pengembalian 0 menunjukkan bahwa tidak ada bidang yang ditetapkan. Nilai yang dikembalikan adalah EOF
untuk kesalahan, atau jika karakter akhir file atau karakter akhir string ditemui dalam upaya pertama untuk membaca karakter. Jika format
adalah NULL
penunjuk, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, vscanf_s
dan vwscanf_s
mengembalikan EOF
dan mengatur errno
ke EINVAL
.
Untuk informasi tentang kode kesalahan ini dan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Keterangan
Fungsi membaca vscanf_s
data dari aliran stdin
input standar dan menulis data ke lokasi yang diberikan oleh arglist
daftar argumen. Setiap argumen dalam daftar harus berupa penunjuk ke variabel jenis yang sesuai dengan penentu jenis di format
. Jika penyalinan terjadi di antara string yang tumpang tindih, perilaku tidak terdefinisi.
vwscanf_s
adalah versi karakter luas dari vscanf_s
; format
argumen ke vwscanf_s
adalah string karakter lebar. vwscanf_s
dan vscanf_s
bersifat identik jika aliran dibuka dalam mode ANSI. vscanf_s
tidak mendukung input dari aliran UNICODE.
Tidak seperti dan , dan mengharuskan ukuran buffer ditentukan untuk semua parameter input tipe c, C, s, S, atau set kontrol string yang diapit dalam [].vwscanf_s
vscanf_s
vwscanf
vscanf
Ukuran buffer dalam karakter diteruskan sebagai parameter lain segera mengikuti penunjuk ke buffer atau variabel. Ukuran buffer dalam karakter untuk wchar_t
string tidak sama dengan ukuran dalam byte.
Ukuran buffer mencakup penghentian null. Anda dapat menggunakan bidang spesifikasi lebar untuk memastikan bahwa token yang dibaca akan sesuai dengan buffer. Jika tidak ada bidang spesifikasi lebar yang digunakan, dan token yang dibaca terlalu besar agar pas di buffer, tidak ada yang ditulis ke buffer tersebut.
Catatan
Parameter size
berjenis unsigned
, bukan size_t
.
Untuk informasi selengkapnya, lihat Spesifikasi Lebar pemindaian.
Pemetaan rutin teks generik
TCHAR. Rutinitas H | _UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_vtscanf_s |
vscanf_s |
vscanf_s |
vwscanf_s |
Untuk informasi selengkapnya, lihat Memformat bidang spesifikasi: scanf
dan wscanf
fungsi.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
vscanf_s |
<stdio.h> |
wscanf_s |
<stdio.h> atau <wchar.h> |
Konsol tidak didukung di aplikasi Platform Windows Universal (UWP). Handel aliran standar yang terkait dengan konsol, , stdin
, stdout
dan stderr
, harus dialihkan sebelum fungsi run-time C dapat menggunakannya di aplikasi UWP. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_vscanf_s.c
// compile with: /W3
// This program uses the vscanf_s and vwscanf_s functions
// to read formatted input.
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
int call_vscanf_s(char *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vscanf_s(format, arglist);
va_end(arglist);
return result;
}
int call_vwscanf_s(wchar_t *format, ...)
{
int result;
va_list arglist;
va_start(arglist, format);
result = vwscanf_s(format, arglist);
va_end(arglist);
return result;
}
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = call_vscanf_s("%d %f %c %C %s %S", &i, &fp, &c, 1,
&wc, 1, s, _countof(s), ws, _countof(ws) );
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
result = call_vwscanf_s(L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
&wc, 1, s, _countof(s), ws, _countof(ws) );
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
Ketika program ini diberikan input dalam contoh, program menghasilkan output ini:
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters
Baca juga
Dukungan matematika dan titik mengambang
Streaming I/O
Lokal
printf
, _printf_l
, wprintf
, _wprintf_l
scanf
, _scanf_l
, wscanf
, _wscanf_l
scanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
vscanf
, vwscanf
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