vfscanf_s, vfwscanf_s

Membaca data yang diformat dari aliran. Versi vfscanf, vfwscanf ini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT.

Sintaks

int vfscanf_s(
   FILE *stream,
   const char *format,
   va_list arglist
);
int vfwscanf_s(
   FILE *stream,
   const wchar_t *format,
   va_list arglist
);

Parameter

stream
Penunjuk ke FILE struktur.

format
String kontrol format.

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. Jika terjadi kesalahan, atau jika akhir aliran file tercapai sebelum konversi pertama, nilai yang dikembalikan adalah EOF untuk vfscanf_s dan vfwscanf_s.

Fungsi-fungsi ini memvalidasi parameternya. Jika stream adalah penunjuk file yang tidak valid, atau format merupakan penunjuk null, fungsi-fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini kembali EOF dan diatur errno ke EINVAL.

Keterangan

Fungsi membaca vfscanf_s data dari posisi stream saat ini ke lokasi yang diberikan oleh arglist daftar argumen (jika ada). Setiap argumen dalam daftar harus berupa penunjuk ke variabel jenis yang sesuai dengan penentu jenis di format. format mengontrol interpretasi bidang input dan memiliki bentuk dan fungsi yang sama dengan format argumen untuk scanf_s; lihat Memformat bidang spesifikasi: scanf dan wscanf fungsi untuk deskripsi format. vfwscanf_s adalah versi vfscanf_skarakter lebar ; argumen format ke vfwscanf_s adalah string karakter lebar. Fungsi-fungsi ini bersifat identik jika aliran dibuka dalam mode ANSI. vfscanf_s saat ini tidak mendukung input dari aliran UNICODE.

Perbedaan utama antara fungsi yang lebih aman (yang memiliki _s akhiran) dan versi lainnya adalah bahwa fungsi yang lebih aman memerlukan ukuran dalam karakter masing-masing cbidang , , Cs, S, dan [ jenis untuk diteruskan sebagai argumen segera mengikuti variabel. Untuk informasi selengkapnya, lihat scanf_sspesifikasi , _scanf_s_l, wscanf_s, _wscanf_s_l dan scanf lebar.

Catatan

Parameter ukuran berjenis unsigned, bukan size_t.

Pemetaan rutin teks generik

TCHAR. Rutinitas H _UNICODE dan _MBCS tidak ditentukan _MBCS Didefinisikan _UNICODE Didefinisikan
_vftscanf_s vfscanf_s vfscanf_s vfwscanf_s

Persyaratan

Function Header yang diperlukan
vfscanf_s <stdio.h>
vfwscanf_s <stdio.h> atau <wchar.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_vfscanf_s.c
// compile with: /W3
// This program writes formatted
// data to a file. It then uses vfscanf_s to
// read the various data back from the file.

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

FILE *stream;

int call_vfscanf_s(FILE * istream, char * format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vfscanf_s(istream, format, arglist);
    va_end(arglist);
    return result;
}

int main(void)
{
    long l;
    float fp;
    char s[81];
    char c;

    if (fopen_s(&stream, "vfscanf_s.out", "w+") != 0)
    {
        printf("The file vfscanf_s.out was not opened\n");
    }
    else
    {
        fprintf(stream, "%s %ld %f%c", "a-string",
            65000, 3.14159, 'x');
        // Security caution!
        // Beware loading data from a file without confirming its size,
        // as it may lead to a buffer overrun situation.

        // Set pointer to beginning of file:
        fseek(stream, 0L, SEEK_SET);

        // Read data back from file:
        call_vfscanf_s(stream, "%s %ld %f%c", s, _countof(s), &l, &fp, &c, 1);

        // Output data read:
        printf("%s\n", s);
        printf("%ld\n", l);
        printf("%f\n", fp);
        printf("%c\n", c);

        fclose(stream);
    }
}
a-string
65000
3.141590
x

Baca juga

Streaming I/O
_cscanf_s, _cscanf_s_l, _cwscanf_s, _cwscanf_s_l
fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
fscanf, _fscanf_l, fwscanf, _fwscanf_l
vfscanf, vfwscanf