ホームページ >バックエンド開発 >C++ >可変数の引数を printf/sprintf に渡すにはどうすればよいですか?

可変数の引数を printf/sprintf に渡すにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-27 16:26:111010ブラウズ

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

printf/sprintf に変数の引数を渡す

プログラミングでは、可変長のテキストやデータをフォーマットして表示する必要がよくあります。一般的に printf や sprintf などの関数によって処理されるタスク。ただし、これらの関数には通常、固定数の引数が必要です。これらの関数に可変の数の引数を渡すにはどうすればよいですか?

解決策: va_* 関数の使用

C 言語には、接頭辞「va_」が付いた一連の関数が用意されています。 " これにより、可変長の引数リストを操作できるようになります。これらの関数には、va_start、va_arg、および va_end が含まれます。

可変数の引数を printf または sprintf に渡すには、次の手順を使用できます。

  1. 保存する va_list 変数を宣言する引数リスト。
  2. va_list 変数と最後にわかっている変数を使用して va_start を呼び出します。
  3. va_arg を使用して、va_list から各引数を取得します。
  4. 取得した引数を printf 関数または sprintf 関数に渡します。
  5. クリーンアップするには、va_end を呼び出します。

例:

#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);
    }
};

この例では、Error メソッドは書式文字列と可変数の引数を受け取ります。 va_arg を使用して引数を取得し、vfprintf を呼び出してテキストをフォーマットして stderr に出力します。

注:

vfprintf の代わりに vsprintf を使用することもできます。バッファ オーバーフローの影響を受けやすいため、お勧めできません。

以上が可変数の引数を printf/sprintf に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。