printf/sprintf に可変数の引数を渡す方法

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

表示する前に文字列を操作し、最初にバッファに保存する必要がある場合は、vsnprintf を使用します。 vsprintf の代わりに . vsnprintf 偶発的なバッファ オーバーフロー エラーを防ぎます。


vsnprintf を参照してください。これにより、必要なことが行われます。

最初に va_list arg 配列を初期化してから呼び出す必要があります。

そのリンクからの例:/* vsprintf の例 */

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

void Error (char * format, ...)
{
  char buffer[256];
  va_list args;
  va_start (args, format);
  vsnprintf (buffer, 255, format, args);


  //do something with the error

  va_end (args);
}

スタック オーバーフローの既存の質問についてもっと読むべきでした。

C++ Passing Variable Number of Arguments も同様の質問です。 Mike F は次のように説明しています:

これはまさに私が探していたものです。次のようなテスト実装を実行しました:

void Error(const char* format, ...)
{
    char dest[1024 * 16];
    va_list argptr;
    va_start(argptr, format);
    vsprintf(dest, format, argptr);
    va_end(argptr);
    printf(dest);
}