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) 安江正樹@東海大学理学部物理学科】