Bagikan melalui


vsscanf, vswscanf

Membaca data yang diformat dari string. Versi yang lebih aman dari fungsi-fungsi ini tersedia; lihat vsscanf_s, vswscanf_s.

Sintaks

int vsscanf(
   const char *buffer,
   const char *format,
   va_list arglist
);
int vswscanf(
   const wchar_t *buffer,
   const wchar_t *format,
   va_list arglist
);

Parameter

buffer
Data tersimpan

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

arglist
Daftar argumen variabel.

Nilai hasil

Masing-masing fungsi ini mengembalikan jumlah bidang yang berhasil dikonversi dan ditetapkan. Nilai yang dikembalikan 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 akhir string tercapai sebelum konversi pertama.

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

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

Keterangan

Fungsi membaca vsscanf data dari buffer ke lokasi yang diberikan oleh setiap argumen dalam arglist daftar argumen. Setiap argumen dalam daftar harus berupa penunjuk ke variabel yang memiliki jenis yang sesuai dengan penentu jenis di format. Argumen format mengontrol interpretasi bidang input dan memiliki bentuk dan fungsi yang sama dengan format argumen untuk scanf fungsi. Jika penyalinan terjadi di antara string yang tumpang tindih, perilaku tidak terdefinisi.

Penting

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

vswscanf adalah versi karakter luas dari vsscanf; argumen untuk vswscanf adalah string karakter lebar. vsscanf tidak menangani karakter heksadesimal multibyte. vswscanf tidak menangani karakter heksadesimal lebar penuh Unicode atau "zona kompatibilitas". Jika tidak, vswscanf dan vsscanf berulah identik.

Pemetaan rutin teks generik

TCHAR. Rutinitas H _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_vstscanf vsscanf vsscanf vswscanf

Persyaratan

Rutin Header yang diperlukan
vsscanf <stdio.h>
vswscanf <stdio.h> atau <wchar.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_vsscanf.c
// compile with: /W3
// This program uses vsscanf to read data items
// from a string named tokenstring, then displays them.

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

int call_vsscanf(char *tokenstring, char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vsscanf(tokenstring, format, arglist);
    va_end(arglist);
    return result;
}

int main( void )
{
    char  tokenstring[] = "15 12 14...";
    char  s[81];
    char  c;
    int   i;
    float fp;

    // Input various data from tokenstring:
    // max 80 character string:
    call_vsscanf(tokenstring, "%80s", s);
    call_vsscanf(tokenstring, "%c", &c);
    call_vsscanf(tokenstring, "%d", &i);
    call_vsscanf(tokenstring, "%f", &fp);

    // Output the data read
    printf("String    = %s\n", s);
    printf("Character = %c\n", c);
    printf("Integer:  = %d\n", i);
    printf("Real:     = %f\n", fp);
}
String    = 15
Character = 1
Integer:  = 15
Real:     = 15.000000

Baca juga

Streaming I/O
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vsscanf_s, vswscanf_s