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
Lepaskan: 2024-11-27 16:26:11
asal
1072 orang telah melayarinya

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);
    }
};
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan