vsnprintf() — 引数データのバッファーへの出力
フォーマット
#include <stdarg.h>
#include <stdio.h>
int vsnprintf(char *target-string, size_t n, const char *format, va_list arg_ptr);
言語レベル
ANSI
スレッド・セーフ
はい
ロケール依存
この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーおよび LC_NUMERIC カテゴリーの影響を受ける可能性があります。また、この振る舞いは、LOCALETYPE(*LOCALEUCS2) または LOCALETYPE(*LOCALEUTF) がコンパイル・コマンドに対して指定されている場合は、現行ロケールの LC_UNI_CTYPE カテゴリーの影響を受ける可能性もあります。詳細については、CCSID およびロケールの理解を参照してください。
説明
vsnprintf() 関数は、一連の文字と値をフォーマット設定し、 バッファー target-string に保管します。vsnprintf() 関数は、 snprintf() 関数に似ていますが、arg_ptr はプログラムの呼び出しによって個数が異なることがある引数のリストを 指しているという点が異なります。これらの引数は、各呼び出しごとに va_start 関数で初期化する必要があります。反対に、snprintf() 関数は 引数のリストを持てますが、そのリストの引数の数はプログラムをコンパイルしたときに 決定されます。
vsnprintf() 関数は、format 内の対応するフォーマット指定子に応じて、引数リスト内の各項目を 変換します。format には、 printf() 関数の書式ストリングと同じ書式および関数があります。
戻り値
vsnprintf() 関数は、配列に書き込まれるバイト数を戻し、 終了ヌル文字はカウントしません。
例
この例では、ストリングの可変値を string に割り当て、結果のストリングを出力します。
#include <stdarg.h>
#include <stdio.h>
void vout(char *string, char *fmt, ...);
char fmt1 [] = "%s %s %s\n";
int main(void)
{
char string[100];
vout(string, fmt1, "Sat", "Sun", "Mon");
printf("The string is: %s¥n", string);
}
void vout(char *string, char *fmt, ...)
{
va_list arg_ptr;
va_start(arg_ptr, fmt);
vsnprintf(string, 8, fmt, arg_ptr);
va_end(arg_ptr);
}
/****************** Output should be similar to: ****************
The string is: Sat Su
*/