std::vprintf, std::vfprintf, std::vsprintf, std::vsnprintf
| ヘッダ <cstdio> で定義
|
||
int vprintf( const char* format, va_list vlist ); |
(1) | |
int vfprintf( std::FILE* stream, const char* format, va_list vlist ); |
(2) | |
int vsprintf( char* buffer, const char* format, va_list vlist ); |
(3) | |
int vsnprintf( char* buffer, std::size_t buf_size, const char* format, va_list vlist ); |
(4) | (C++11以上) |
vlist によって定義される位置からデータをロードし、それらを文字列に変換し、結果を様々なシンクに書き込みます。
stream に書き込みます。buffer に書き込みます。buffer に書き込みます。 最大 buf_size-1 文字が書き込まれます。 buf_size がゼロでなければ、結果の文字列はヌル文字で終端されます。 buf_size がゼロの場合は、何も書き込まれず、 buffer はヌルポインタであっても構いませんが、その場合でも戻り値 (本来書き込まれたはずのヌル終端を含まないバイト数) は計算され、返されます。引数
| stream | - | 書き込む出力ファイルストリーム | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| buffer | - | 書き込む文字列を指すポインタ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| buf_size | - | 書き込む最大文字数 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| format | - | データの解釈方法を指定するヌル終端マルチバイト文字列を指すポインタ。
書式文字列は、変更されずに出力ストリームにコピーされる (
以下の書式指定子が利用できます。
浮動小数点変換関数は無限大を 非数は 変換
固定幅の整数型 (int8_t など) に対する正しい変換指定はヘッダ <cinttypes> で定義されています (PRIdMAX, PRIuMAX などは メモリに書き込む変換指定子 変換指定子それぞれの動作後に副作用完了点があります。 これにより同じ変数に複数の 変換指定が無効な場合、動作は未定義です。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| vlist | - | 表示するデータを格納している可変長引数リスト |
戻り値
buf_size 制限のために切り捨てられた場合は、もし制限が課されなければ書き込まれたであろう合計文字数 (終端のヌルバイトは含みません) を返します。ノート
これらのすべての関数は va_arg を少なくとも1回は呼び、戻った後 arg の値は不定になります。 これらの関数は va_end を呼ばす、それは呼び出し元が行わなければなりません。
例
#include <vector>
#include <cstdio>
#include <cstdarg>
#include <ctime>
void debug_log(const char *fmt, ...)
{
std::time_t t = std::time(nullptr);
char time_buf[100];
std::strftime(time_buf, sizeof time_buf, "%D %T", std::gmtime(&t));
va_list args1;
va_start(args1, fmt);
va_list args2;
va_copy(args2, args1);
std::vector<char> buf(1+std::vsnprintf(nullptr, 0, fmt, args1));
va_end(args1);
std::vsnprintf(buf.data(), buf.size(), fmt, args2);
va_end(args2);
std::printf("%s [debug]: %s\n", time_buf, buf.data());
}
int main()
{
debug_log("Logging, %d, %d, %d", 1, 2, 3);
}
出力:
04/13/15 15:09:18 [debug]: Logging, 1, 2, 3
関連項目
(C++11) |
stdout、ファイルストリームまたはバッファに書式付き出力を行います (関数) |
(C++11)(C++11)(C++11) |
可変個引数リストを使用して stdin、ファイルストリームまたはバッファから書式付き入力を行います (関数) |
vprintf, vfprintf, vsprintf, vsnprintf の C言語リファレンス
|