1. ホーム
  2. c++

[解決済み] printf/sprintf に可変個数の引数を渡すには?

2023-04-21 18:39:27

質問

いくつかのテキストをフォーマットする "error"関数を保持するクラスを持っています。 私は、可変数の引数を受け入れ、printfを使用してそれらをフォーマットしたいと思います。

class MyClass
{
public:
    void Error(const char* format, ...);
};

Errorメソッドはパラメータを受け取り、printf/sprintfを呼び出してフォーマットし、そしてそれを使って何かをする必要があります。 私はすべてのフォーマットを自分で書きたくないので、既存のフォーマットを使用する方法を見つけ出そうとすることは理にかなっています。

どのように解決するのですか?

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

表示する前に文字列を操作したい場合、どうしてもバッファに保存しておく必要がある場合は vsnprintf の代わりに vsprintf . vsnprintf とすることで、偶発的なバッファオーバーフローエラーを防ぐことができます。