Bagikan melalui


vscanf, vwscanf

Membaca data yang diformat dari aliran input standar. Versi yang lebih aman dari fungsi-fungsi ini tersedia; lihat vscanf_s, vwscanf_s.

Sintaks

int vscanf(
   const char *format,
   va_list arglist
);
int vwscanf(
   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.

Jika format adalah NULL penunjuk, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini kembali EOF dan diatur errno ke EINVAL.

Untuk informasi tentang kode kesalahan ini dan lainnya, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

Keterangan

Fungsi membaca vscanf 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.

Penting

Ketika Anda menggunakan vscanf untuk membaca string, selalu tentukan lebar untuk format %s (misalnya, "%32s" alih-alih "%s"); jika tidak, input yang salah diformat dapat menyebabkan penyerbuan buffer. Sebagai alternatif, Anda dapat menggunakan vscanf_s, vwscanf_s atau fgets.

vwscanf adalah versi karakter luas dari vscanf; format argumen ke vwscanf adalah string karakter lebar. vwscanf dan vscanf bersifat identik jika aliran dibuka dalam mode ANSI. vscanf tidak mendukung input dari aliran UNICODE.

Pemetaan rutin teks generik

TCHAR. Rutinitas H _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_vtscanf vscanf vscanf vwscanf

Untuk informasi selengkapnya, lihat Memformat bidang spesifikasi: scanf dan wscanf fungsi.

Persyaratan

Rutin Header yang diperlukan
vscanf <stdio.h>
vwscanf <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.c
// compile with: /W3
// This program uses the vscanf and vwscanf functions
// to read formatted input.

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

int call_vscanf(char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vscanf(format, arglist);
    va_end(arglist);
    return result;
}

int call_vwscanf(wchar_t *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vwscanf(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( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, 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( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, 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);
}

      71 98.6 h z Byte characters
36 92.3 y n Wide charactersThe 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

Lihat juga

Dukungan matematika dan titik mengambang
Streaming I/O
Lokal
fscanf, , _fscanf_lfwscanf,_fwscanf_l
printf, , _printf_lwprintf,_wprintf_l
sprintf, , _sprintf_lswprintf, , _swprintf_l,__swprintf_l
sscanf, , _sscanf_lswscanf,_swscanf_l
vscanf_s, vwscanf_s