概要
可変引数リストva_listを使用し、書式と文字数の上限を指定して文字列領域に出力する。
引数を...で受け取るsnprintf()と異なり、va_listとしてまとめられた可変引数を受け取る。可変引数を受け取る自作の関数から、書式付き出力を行いたい場合に使用する。
戻り値
snprintf()と同じ。
備考
- この関数は
va_endマクロを呼び出さないため、呼び出し側でargに対してva_endを実行する必要がある
例
#include <cstdio>
#include <cstdarg>
// 可変引数を受け取り、書式付きで出力する関数
void log_message(const char* format, ...)
{
char buffer[64];
std::va_list args;
va_start(args, format);
std::vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args);
std::printf("%s", buffer);
}
int main()
{
log_message("%s: %d\n", "count", 42);
}
出力
count: 42
処理系
- Clang: 3.4 ✅
- GCC: 4.7.1 ✅
- Visual C++: 2019 ✅
備考
- 動作確認した範囲での最小バージョンを記載している。Clangは3.4(Compiler Explorerで利用できる最古のバージョン)、Visual C++は2019(同左)で動作を確認しており、それ以前のバージョンでも使用できる可能性がある