vprintf, vfprintf, vsprintf - 書式つき出力変換
【書式】
#include <stdio.h>
#include <stdarg.h>
int vprintf(const char *format, va_list arg);
int vfprintf(FILE *fp, const char *format, va_list arg);
int vsprintf(char *buf, const char *format, va_list arg);
【解説】
vprintf(), vfprintf(), vsprintf()は、それぞれ関数名の先頭にvがつかな
い関数printf(3), fprintf(3), sprintf(3)と同様の動作をしますが、パラ
メタのあたえ方が異なります。
printf(3)一族は可変個のパラメタを要求するのに対し、vprintf(3) 一族は
va_list型のパラメタひとつだけを必要とします。argはマクロva_start()に
よって初期化された va_list型の変数でなくてはなりません。または、初期
化されたあとにva_arg()マクロによって進められていてもかまいません。
vprintf()一族はライブラリファイルdoslib.libとintlib.lib の両方に含ま
れています。 intlib.libに含まれているvprintf()には、浮動小数点数の表
示機能(f, e, E, g, G)がありません。これは、浮動小数点数の表示を必要
としない多くのプログラムにムダな浮動小数点演算パッケージをリンクしな
いようにして、作成した実行ファイルを小さくするために用意しました。こ
ちらのvprintf()を使う場合には、次のようにintlib.lib をライブラリとし
て指定してください。
lcc prog.c -lintlib
【使用例】
sprintf(3)に似ていますが、文字数の代りに文字列の最後のナル文字('\0')
のアドレスを返す関数pprintf()は次のように書けます。
char *pprintf(char *buf, char *format, ...)
{
va_list arg;
va_start(arg, format);
buf += vsprintf(buf, format, arg);
va_end(arg);
return (buf);
}
【リターン値】
出力された文字数を返します。もしエラーがあると-1を返します。
【可搬性】
vsprintf()
ANSI, UNIX, DOS窓
それ以外
ANSI, UNIX, DOS窓
【参照】
printf(3), va_arg(3)
【バグ】
vsprintf() はbufに変換結果が入るだけの余裕があるかどうかのチェックは
しません。bufには十分な領域を取っておいてください。
【copyright (c) 安江正樹@東海大学理学部物理学科】