C ++ vswprintf () - C ++ Pustaka Standar

Fungsi vswprintf () di C ++ digunakan untuk menulis string lebar yang diformat ke buffer string lebar.

Fungsi vswprintf () didefinisikan dalam file header.

vswprintf () prototipe

 int vswprintf (wchar_t * buffer, size_t buf_size, format const wchar_t *, va_list vlist);

Fungsi vswprintf () menulis string lebar yang ditunjukkan oleh format ke buffer string lebar. Maksimum (buf_size-1)karakter lebar ditulis ke buffer yang diikuti dengan karakter lebar null.

Format string lebar mungkin berisi penentu format yang dimulai dengan% yang digantikan oleh nilai variabel yang diteruskan sebagai daftar vlist.

vswprintf () Parameter

  • buffer: Arahkan ke buffer string lebar untuk menulis hasilnya.
  • buf_size: Jumlah maksimum karakter lebar untuk ditulis termasuk penghentian karakter lebar null.
  • format: Sebuah pointer ke string lebar diakhiri null yang ditulis ke buffer. Ini terdiri dari karakter bersama dengan penentu format opsional yang dimulai dengan%. Penentu format diganti dengan nilai variabel masing-masing yang mengikuti format.
    Penentu format memiliki bagian-bagian berikut:
    • Tanda% terkemuka
    • Bendera: Pilihan satu atau lebih tanda yang mengubah perilaku konversi.
      • -: Rata kiri hasil di lapangan. Secara default, ini benar.
      • +: Tanda hasil dilampirkan di awal nilai, bahkan untuk hasil positif.
      • Spasi: Jika tidak ada tanda, spasi dilampirkan di awal hasil.
      • #: Bentuk alternatif dari konversi dilakukan.
      • 0: Digunakan untuk bilangan bulat dan bilangan floating point. Nol di depan digunakan untuk mengisi angka, bukan spasi.
    • Lebar: Nilai opsional * atau bilangan bulat yang digunakan untuk menentukan bidang lebar minimum.
    • Presisi: Bidang opsional yang terdiri dari a. diikuti dengan * atau integer atau tidak sama sekali untuk menentukan presisi.
    • Panjang: Pengubah panjang opsional yang menentukan ukuran argumen.
    • Penentu: Penentu format konversi. Penentu format yang tersedia adalah sebagai berikut:
    Penentu format
    Penentu Format Deskripsi
    % Cetakan%
    c Menulis satu karakter
    s Menulis string karakter
    d atau i Mengonversi bilangan bulat bertanda menjadi representasi desimal
    Hai Mengonversi bilangan bulat tak bertanda tangan menjadi representasi oktal
    X atau x Mengonversi bilangan bulat tak bertanda menjadi representasi heksadesimal
    u Mengonversi bilangan bulat tak bertanda menjadi representasi desimal
    F atau f Mengonversi bilangan floating-point menjadi representasi desimal
    E atau e Mengonversi bilangan titik-mengambang menjadi notasi eksponen desimal
    A atau a Mengonversi bilangan titik-mengambang menjadi eksponen heksadesimal
    G atau g Mengonversi bilangan titik-mengambang menjadi notasi eksponen desimal atau desimal
    n Mengembalikan jumlah karakter yang ditulis sejauh ini oleh panggilan ini ke fungsi. Hasilnya ditulis ke nilai yang ditunjukkan oleh argumen
    p Menulis implementasi urutan karakter yang didefinisikan yang mendefinisikan sebuah pointer.

    Jadi format umum penentu format adalah:
     % (flags) (width) (. precision) (length) specifier
  • vlist: Daftar argumen yang berisi data untuk ditulis.

vswprintf () Nilai kembali

  • Jika berhasil, fungsi vswprintf () mengembalikan jumlah karakter lebar yang ditulis tidak termasuk karakter lebar null yang mengakhiri.
  • Nilai negatif dikembalikan jika terjadi kesalahan pengkodean atau jika jumlah karakter yang akan dihasilkan sama atau lebih besar dari buf_size.

Contoh: Bagaimana fungsi vswprintf () bekerja?

 #include #include #include void write(wchar_t* buffer, size_t buf_size, const wchar_t *fmt,… ) ( va_list args; va_start(args, fmt); vswprintf(buffer, buf_size, fmt, args); va_end(args); ) int main () ( wchar_t str() = L"u0684 u06b1 u06aa u06a3 u0684"; wchar_t buffer(50); setlocale(LC_ALL, "en_US.UTF-8"); write(buffer, 50, L"Arabic Letters: %ls", str); wprintf(L"%ls", buffer); return 0; )

Saat Anda menjalankan program, berikut ini akan ditulis ke example.txt:

 Huruf Arab: ڄ ڱ ڪ ڣ ڄ

Artikel yang menarik...