改行文字(newline) の復帰改行(carriage return)
への自動変換にご注意ください。改行文字(newline)へのこの手続きはバイナリ転送を破壊します。バイナリ転送が要求されれば、自動変換は行われません。そのかわり、CR-LFシーケンスを意図した文字列は、明示的に"\r\n"
を用いなければなりません。
|
Defines |
#define | FILE struct __file |
#define | stdin (__iob[0]) |
#define | stdout (__iob[1]) |
#define | stderr (__iob[2]) |
#define | EOF (-1) |
#define | fdev_set_udata(stream, u) do { (stream)->udata = u; } while(0) |
#define | fdev_get_udata(stream) ((stream)->udata) |
#define | fdev_setup_stream(stream, put, get, rwflag) |
#define | _FDEV_SETUP_READ __SRD |
#define | _FDEV_SETUP_WRITE __SWR |
#define | _FDEV_SETUP_RW (__SRD|__SWR) |
#define | _FDEV_ERR (-1) |
#define | _FDEV_EOF (-2) |
#define | FDEV_SETUP_STREAM(put, get, rwflag) |
#define | fdev_close() |
#define | putc(__c, __stream) fputc(__c, __stream) |
#define | putchar(__c) fputc(__c, stdout) |
#define | getc(__stream) fgetc(__stream) |
#define | getchar() fgetc(stdin) |
Functions |
int | fclose (FILE *__stream) |
int | vfprintf (FILE *__stream, const char *__fmt, va_list __ap) |
int | vfprintf_P (FILE *__stream, const char *__fmt, va_list __ap) |
int | fputc (int __c, FILE *__stream) |
int | printf (const char *__fmt,...) |
int | printf_P (const char *__fmt,...) |
int | vprintf (const char *__fmt, va_list __ap) |
int | sprintf (char *__s, const char *__fmt,...) |
int | sprintf_P (char *__s, const char *__fmt,...) |
int | snprintf (char *__s, size_t __n, const char *__fmt,...) |
int | snprintf_P (char *__s, size_t __n, const char *__fmt,...) |
int | vsprintf (char *__s, const char *__fmt, va_list ap) |
int | vsprintf_P (char *__s, const char *__fmt, va_list ap) |
int | vsnprintf (char *__s, size_t __n, const char *__fmt, va_list ap) |
int | vsnprintf_P (char *__s, size_t __n, const char *__fmt, va_list ap) |
int | fprintf (FILE *__stream, const char *__fmt,...) |
int | fprintf_P (FILE *__stream, const char *__fmt,...) |
int | fputs (const char *__str, FILE *__stream) |
int | fputs_P (const char *__str, FILE *__stream) |
int | puts (const char *__str) |
int | puts_P (const char *__str) |
size_t | fwrite (const void *__ptr, size_t __size, size_t __nmemb, FILE *__stream) |
int | fgetc (FILE *__stream) |
int | ungetc (int __c, FILE *__stream) |
char * | fgets (char *__str, int __size, FILE *__stream) |
char * | gets (char *__str) |
size_t | fread (void *__ptr, size_t __size, size_t __nmemb, FILE *__stream) |
void | clearerr (FILE *__stream) |
int | feof (FILE *__stream) |
int | ferror (FILE *__stream) |
int | vfscanf (FILE *__stream, const char *__fmt, va_list __ap) |
int | vfscanf_P (FILE *__stream, const char *__fmt, va_list __ap) |
int | fscanf (FILE *__stream, const char *__fmt,...) |
int | fscanf_P (FILE *__stream, const char *__fmt,...) |
int | scanf (const char *__fmt,...) |
int | scanf_P (const char *__fmt,...) |
int | vscanf (const char *__fmt, va_list __ap) |
int | sscanf (const char *__buf, const char *__fmt,...) |
int | sscanf_P (const char *__buf, const char *__fmt,...) |
int | fflush (FILE *stream) |
FILE * | fdevopen (int(*put)(char, FILE *), int(*get)(FILE *)) |
|
vfprintf は、printfファミリの中核をなすものです。これは、fmt で渡される書式(フォーマット)文字列の制御に従って、値をストリームに出力します。出力すべき値は可変引数リスト
ap で渡されます。
vfprintf はストリームに書き込まれた文字数を返します。エラー発生時には
EOF値を返します。現時点では、エラーはストリームが書き込み用として開かれていない場合のみ発生します。
フォーマット文字列は0個以上の指令から成り、そのまま出力ストリームに渡される通常文字( % 以外)と、変換指定文字から成ります。これらはそれぞれ0個以上の引数を採ります。各々の変換指定は、'%'で始まります。続く引数は変換指定子と型も含め符合がとれていなければなりません。'%'の後に、以下のような文字が付きます。
※例:%-10.4f '-'がフラグ、10.4がオプション、fが変換指定子 (10はフィールド幅指定、4は精度指定))
- 0個以上のフラグ:
# 値は "別の形式" に変換されます。c,
d, i, s, u変換(文字、数値、、文字列、)についてはこのオプションは特に働きを持ちません。o
変換(符号なし8進数)に関して、出力の最初の1文字は0に強制され、桁数が増えます(ただし、明示的に精度指定フォーマットされているため、既にゼロが先頭についている場合を除く)。
x 、X 変換(16進)の場合、ゼロでない結果は
"0x" もしくは "0X"の形式となります。
0 (zero) すべての変換に関して、変換値の左側にはブランク(スペース)ではなく
0 があてがわれます。もし数値変換(d, i, o,
u, i, x, and X)で精度(後述)が与えられたときは、
0 フラグは無視されます。
Zero padding. For all conversions, the converted
value is padded on the left with zeros rather
than blanks. If a precision is given with
a numeric conversion (d, i, o, u, i, x, and
X), the 0 flag is ignored.
-
- 負のフィールド幅フラグ; 変換された値はフィールド境界に対し左寄せされます。変換された値は右側にブランクがあてがわれます。(左側の場合はブランク又は0) '-'と'0'が両方指定された場合は'-'の指定が優先されます。
' ' (space) 符号付き数値変換 (d、i)時、正の数表示の前にブランクをつける.
-
+ 符号付き数値変換 (d、i)時、正の数表示の前に必ず符号(+
or -)をつける。Spaceより優先される。
- オプションの10進数数値文字列は、最低のフィールド幅を指定します。変換された値がフィールド幅より少ない文字数の場合は、フィールド幅を埋めるために左側(左寄せフラグが与えられた場合は右側)にスペースがあてがわれます。
※例:%8d=幅8文字で右寄せ(左側にスペースをつけて8文字にする)
- オプションの「精度」(小数点以下表示桁数)は、上記のフィールド幅指定10進数値に続くピリオドに10進数数値文字列が続く形式です。数値文字列が省略された場合は精度は
0 と見なされます。これは、 d, i, o, u, x,
X 変換に置いては表示される最下位桁を指定し、s変換(文字列)の場合は表示される最大の文字数の制限を指定します。
- オプションの l (小文字のL)は長さ(データのサイズ)を調整します。d,
i, o, u, x, X 変換では、変換数値を int ではなく
"long int" として変換する事を指定します。
※例:%ld=32bit整数変換
- 変換形式を指定する文字が続きます。変換指定子とその意味は以下のようになっています。
d,i,o,u,x,X int型(もしくはintに型変換できるその他の型)
の引数を符号付き10進数 (d,i)、符号なし8進数(o)、符号なし10進数(u)、符号なし16進数(x,X)表記で変換します。x変換では文字
"abcdef" が、X変換では文字 "ABCDEF"
が使われます。精度指定オプションがあれば、表示されなければならない桁数の最小値を与えます。変換された結果が精度値より少ない桁数の場合は、左側にゼロが与えられます。
※%10.6dで123を変換→"____000123" ("_" はスペースを表す)
p (void *) 型の引数をuisigned intとして受け取り、#x コマンドと同様の16進変換を行います。
c int型の引数を unsigned charとして変換し、文字コードに対応する文字を表示します。
s 文字列(charの配列)へのポインタとして、(char *) 型の引数を受けます。配列からの文字は文字列終端のNULが出るまで出力されます。精度指定があれば、その指定文字数以上は出力されません。精度指定がない、又は文字数が文字列領域サイズより大きい場合は、文字配列は終端のNUL文字を持たなければなりません。
% (%の後に) % が書かれた場合は、引数の変換は行われません('%' 自体を表示します)。完全な変換指定は "%%"です。 ※ '%'を出力するには、フォーマット文字列中に"%%"を書けばいい。%%を出力するなら%%%%。
eE 倍精度実数の引数をフォーマット "[-]9.999e±99" 形式に変換されます。小数点前に1桁、小数点以降には精度指定と同じ桁数が表示されます。精度指定がない場合は、6桁と見なされます。精度指定が0の場合は、小数点も小数点以下桁も現れません。指数部は常に2桁表示です。指数値がゼロの場合は指数は00です。eではなくEを使う場合は、指数表現を表す文字が大文字のEになります
("[-]9.999E±99") 。
fF 倍精度実数値引数を "[-]ddd.ddd"
形式の10進表記に変換します。小数点以下の桁数は精度指定値と同じになります。精度指定がない場合は6桁と見なされます。精度指定が0の場合は、小数点も小数点以下桁も現れません。小数点が現れる場合は、小数点前に少なくとも1桁の数字があります。※0.123を.123とは変換しない
gG 倍精度実数値引数を、g変換の場合はf又はe(G変換の場合はF又はE)形式で変換します。精度指定は表示する桁数の指定となります。精度指定がなければ6桁として、0なら、1桁として扱われます。(e変換をした場合の)指数が-4を下回ったとき、又は数値が表示桁数指定を上回ったときにはe変換が使われます。小数部の末尾の0は取り除かれますので、小数点は小数点以下(表示桁数以内)に0以外が現れたときに限り出現します。
S s変換と似ているが、FLASH上の文字列へのポインタとして扱われる点が異なります。
- フィールド幅が狭い場合でも、数値フィールドの切り捨ては行われません。変換結果がフィールド幅より大きい場合は、フィールドは変換結果に合わせて拡大されます。
ここに述べた機能をフル実装するとかなり大きな関数になってしまいます。そこで、3種の異なった味付けのvfprintf()が用意されており、選択が可能です。
- デフォルトのvfprintf()は浮動小数点変換以外のすべての機能を実装しています。
- 基本的な整数・文字列変換だけなら、小型化バージョンのvfprintf()が利用できます。ただし変換フラグを使って指定する追加オプションは利用できません。これらフラグは正しく文法解析されますが、単純に無視されます。このバージョンは以下の
compiler optionsで要求することができます。
- 浮動小数点を含むフル機能版が欲しければ、以下のオプションをつけてください。
- 制限:
- フィールド幅指定と精度指定は最大127です。
- 浮動小数点変換に関しては、精度指定>0で、DBL_MAX付近の数値を変換した場合、末尾の桁が失われます。
|