C ++ vsnprintf () - C ++ Pustaka Standar

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

Tidak seperti vsprintf (), jumlah karakter maksimum yang dapat ditulis ke buffer ditentukan di vsnprintf().

vsnprintf () prototipe

 int vsnprintf (char * buffer, size_t buf_size, format const char *, va_list vlist);

The vsnprintf()Fungsi menulis string ditunjukkan oleh format ke format buffer string karakter. Jumlah karakter maksimum yang dapat ditulis adalah buf_size. Setelah karakter ditulis, karakter null penghentian ditambahkan. Jika buf_size sama dengan nol, tidak ada yang ditulis dan buffer mungkin berupa pointer nol.

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

Ini didefinisikan dalam file header.

vsnprintf () Parameter

  • buffer: Arahkan ke string karakter untuk menulis hasilnya.
  • buf_size: Jumlah karakter maksimum untuk ditulis.
  • format: Pointer ke string dihentikan null yang ditulis ke aliran file. Ini terdiri dari karakter bersama dengan penentu format opsional yang dimulai dengan%.

    Penentu format diganti dengan nilai variabel masing-masing yang mengikuti format string.

    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 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.

vsnprintf () Nilai kembali

  • Jika berhasil, vsnprintf()fungsi mengembalikan jumlah karakter yang ditulis.
  • Jika gagal, ia mengembalikan nilai negatif.
  • Jika panjang string yang diformat lebih besar dari buf_size, itu perlu dipotong. Dalam kasus seperti itu, vsnprintf()fungsi mengembalikan jumlah total karakter tidak termasuk mengakhiri karakter null yang akan ditulis, jika batas buf_size tidak diberlakukan.

Contoh: Bagaimana fungsi vsnprintf () bekerja

 #include #include void write(char* buf, int buf_size, const char *fmt,… ) ( va_list args; va_start(args, fmt); vsnprintf(buf, buf_size, fmt, args); va_end(args); ) int main () ( char buffer(100); char fname(20) = "Bjarne"; char lname(20) = "Stroustrup"; char lang(5) = "C++"; write(buffer, 27, "%s was created by %s %s", lang, fname, lname); printf("%s", buffer); return 0; )

Saat Anda menjalankan program, hasilnya adalah:

 C ++ dibuat oleh Bjarne 

Artikel yang menarik...