Bagikan melalui


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_svscanf_svwscanfvscanf 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, stdoutdan 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