Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melepasi Bilangan Pembolehubah Argumen kepada printf/sprintf?

Bagaimanakah Saya Boleh Melepasi Bilangan Pembolehubah Argumen kepada printf/sprintf?

Barbara Streisand
Barbara Streisandasal
2024-11-27 16:26:111009semak imbas

How Can I Pass a Variable Number of Arguments to printf/sprintf?

Melalukan Argumen Pembolehubah ke printf/sprintf

Dalam pengaturcaraan, selalunya timbul keperluan untuk memformat dan memaparkan teks atau data panjang berubah-ubah, tugas yang biasa dikendalikan oleh fungsi seperti printf dan sprintf. Walau bagaimanapun, fungsi ini biasanya memerlukan bilangan argumen tetap. Bagaimanakah kita boleh menghantar bilangan argumen yang berubah-ubah kepada fungsi ini?

Penyelesaian: Menggunakan Fungsi va_*

Bahasa C menyediakan satu set fungsi yang diawali dengan "va_ " yang membolehkan kami bekerja dengan senarai hujah panjang boleh ubah. Fungsi ini termasuk va_start, va_arg dan va_end.

Untuk menghantar pembolehubah bilangan argumen ke printf atau sprintf, kita boleh menggunakan langkah berikut:

  1. Isytiharkan pembolehubah va_list untuk disimpan senarai argumen.
  2. Panggil va_start dengan pembolehubah va_list dan yang terakhir diketahui argument.
  3. Gunakan va_arg untuk mendapatkan setiap argumen daripada va_list.
  4. Hantarkan argumen yang diambil ke fungsi printf atau sprintf.
  5. Panggil va_end untuk membersihkan apabila selesai.

Contoh:

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

class MyClass {
public:
    void Error(const char* format, ...) {
        va_list argptr;
        va_start(argptr, format);
        vfprintf(stderr, format, argptr);
        va_end(argptr);
    }
};

Dalam contoh ini, kaedah Ralat mengambil rentetan format dan nombor pembolehubah argumen. Ia menggunakan va_arg untuk mendapatkan semula argumen dan kemudian memanggil vfprintf untuk memformat dan mengeluarkan teks kepada stderr.

Nota:

Walaupun boleh menggunakan vsprintf dan bukannya vfprintf, ia tidak disyorkan kerana ia mudah terdedah kepada limpahan penimbal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melepasi Bilangan Pembolehubah Argumen kepada printf/sprintf?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn