機 能
|
fprintf関数は、formatに続く実引数を、文字の並びである出力形式に変換して、streamが指すストリームへ出力する。その変換は、formatが指す書式文字列内の指令にしたがう。書式文字列内には、指令が含まれていなくともよいし、複数含まれていてもよい。
書式に対して実引数が不足しているときの動作は定義されない。実引数が残っているにもかかわらず書式がつきてしまう場合、余分な実引数は評価するだけで無視する。
指令は、以下のいずれかである。
- 変換されずにそのまま出力ストリームに複写される%以外の文字。
- 後続の実引数を0個以上取り出す変換指定。
%の後ろには、次の(a)~(e)がこの順に現れる。
- (a) フラグ(flag) … 省略可
- -, +, 空白, #, 0によって、変換指定の意味を修飾する。0個以上を指示でき、その順序は任意。
-
| 変換結果をフィールド内に左詰めにする。指定がなければ、右詰めとなる。
|
+
| 符号付き変換をされる数値の前に、プラス符号またはマイナス符号を付ける。指定がなければ、負の値のみにマイナス符号が付けられる。
|
空白
| 符号付き変換の結果が符号で始まらない場合、または符号付き変換の結果の文字数が0の場合、数値の前に空白を付ける。空白フラグと+フラグの両方を指定すると、空白フラグは無効となる。
|
#
| 数値の表記形式(基数など)がわかるような変換を行う。
- o変換
- 最初の数字を0にする(精度が増やされる)。
- x, X変換
- 数値の前に0x(あるいは0X)を付加する(0のときは付加しない)。
- e, E, f, g, G変換
- 小数点文字の後ろに数字が続かなくても、常に小数点文字を付ける(通常は、小数点文字は数字が後続する場合に限り付けられる)。
- g, G変換
- 後ろに続く0を結果から取り除かない。
- その他の変換
- 動作は未定義とする。
|
0
|
- d, i, o, u, x, X, e, E, f, g, G変換
- フィールド幅の左側を、空白でなく0で詰める(ただし、符号や基数は、0の前におかれる)。
- その他の変換
- 動作は未定義とする。
※0フラグと-フラグの両方を与えた場合、0フラグは無効となる。
※d, i, o, u, x, X変換において精度が指定された場合、0フラグは無効となる。
|
- (b) 最小フィールド幅(field width) … 省略可
- 値を変換した結果の文字数がこのフィールド幅より少ない場合、このフィールド幅を満たすまで左側(-フラグを指定した場合は右側)に(0フラグを指定しなければ)空白を詰める。フィールド幅の形式はアスタリスク*(後述)または10進数整数とする。
- (c) 精度(precision) … 省略可
- d、i、o、u、xおよびX変換については出力すべき最小のけた数を、e、Eおよびf変換については小数点文字の後ろに出力するべきけた数を、gおよびG変換については最大の有効けた数を、そしてs変換については文字列から出力にかき出すことができる最大の文字数を指定する。精度の形式は、ピリオド(.)の後ろにアスタリスク*(後述)または省略が可能な10進整数が続く。10進整数を省略した場合、0を精度に指定したものとして扱う。精度をこれら以外の変換で指定したときの動作は定義されない。
- (d) h、lまたはL … 省略可
-
h
|
- d、i、o、u、xまたはX変換指定子が続く場合
- 対応する実引数の型がshort int型またはunsigned short int型であることを指定する(実引数は汎整数拡張に従って拡張されている。その値を表示する前にshort int型またはunsigned short int型に戻す変換を行う)。
- n変換指定子が続く場合
- 対応する実引数の型がshort int型へのポインタであることを指定する。
|
l
|
- d、i、o、u、xまたはX変換指定子が続く場合
- 対応する実引数の型がlong int型またはunsigned long int型であることを指定する。
- n変換指定子が続く場合
- 対応する実引数の型がlong int型へのポインタであることを指定する。
|
L
|
- e、E、f、GまたはG変換指定子が続く場合
- 対応する実引数の型がlong double型であることを指定する。
- h、lまたはLを他の変換指定子とともに指定した場合
- 動作は定義されない。
|
- (e) 変換指定子
- 変換を指定するd, i, o, u, x, X, f, e, E, g, G, c, s, p, n, %の各文字。
フィールド幅、精度またはその両方をアスタリスクで指定しても構わない。この場合、フィールド幅または精度を指定するint型の実引数を必要とする。このフィールド幅、精度またはその両方を指定する実引数は、変換される実引数の前にこの順番で与えなければならない。フィールド幅を指定する実引数が負の場合、-フラグが前置された正のフィールド幅として解釈する。精度を指定する実引数が負の場合、精度を省略したのもとして解釈する。
d, i
| int型の実引数を[-]dddd形式の符号付き10進表記に変換する。精度は出力すべき数字の最少個数を指定する。値を変換した結果の数字の個数(桁数)が指定された精度より少ない場合は、その精度になるまで前に0を付ける。省略時の精度は1となる。値0を精度0で変換した結果の桁数は0となる。
|
o, u, x, X
| unsigned型の実引数をdddd形式の符号無し8進表記(o)、符号無し10進表記(u)、符号無し16進表記(xまたはX)に変換する。x変換では、文字abcdefを用い、X変換では、文字ABCDEFを用いる。精度は出力すべき最少の桁数を指定する。値を変換した結果の桁数が指定された精度より少ない場合は、その精度になるまで先行する0で拡張する。省略時の精度は1となる。値0を精度0で変換した結果の桁数は0となる。
|
f
| double型の実引数を[-]ddd.ddd形式の10進表記に変換する。このとき、小数点以下の桁数は、精度の指定に等しい。省略時の精度は6となる。精度に0が指定され、かつ#フラグが指定されていない場合は、小数点文字を出力しない。小数点文字を出力するときには、その前に必ず1個以上の数字を出力する。この変換は、適切な桁数へ値の丸めも行う。
|
e, E
| double型の実引数を[-]d.ddde±dd形式の10進表記に変換する。このとき、小数点文字の前に1桁の(実引数が0の場合を除いて、0以外の)数字を出力し、小数点以下には精度と同じ桁数の数字を出力する。省略時の精度は6となる。精度に0が指定され、かつ#フラグが指定されていない場合、小数点文字を出力しない。この変換は、適切な桁数への値の丸めも行う。E変換指定子の場合、指数に先行する文字は、eではなくEとなる。指数は、常に2桁以上となる。値が0の場合、指数の値は0となる。
|
g, G
| double型の実引数を、有効桁数を指定する精度にしたがって、f形式、あるいはe形式(G変換指定子の場合はE形式)のいずれかに変換する。精度が0の場合は、1と解釈される。使用される形式は、変換される値に依存する。変換の結果から得られる指数が-4より小さいか、精度以上であれば、e形式(またはE形式)を用いる。いずれの形式でも、後続する0を結果の小数部から取り除く。小数点以下に数字が続くときだけ、小数点文字を出力する。
|
c
| int型の実引数をunsigned char型に型変換し、その結果の文字を出力する。
|
s
| 実引数は、文字型の配列へのポインタでなければならない。配列内の文字を、 終端ナル文字の直前まで出力する。精度が指定された場合、精度を超える文字数は出力しない。精度が指定されないか、精度が配列の大きさよりも大きい場合、配列はナル文字を含まなければならない。
|
p
| 実引数は、voidへのポインタでなければならない。そのポインタの値を処理系定義の方法で、表示可能な文字の並びに変換する。
|
n
| 実引数は、整数へのポインタでなければならない。このfprintfの呼出しでその時点までに出力ストリームに出力された文字数を、その整数に格納する。実引数の変換は行わない。
|
%
| %を出力する。実引数はない。変換指定全体は、%%でなければならない。
|
無効な変換指定子に対する動作は、未定義とする。
実引数が、共用体もしくは集成体であるか、またはそれらを指すポインタである場合(%s変換のときの文字型配列または%p変換のときのポインタを除く)、動作は未定義とする。
フィールド幅が存在しないとき、または小さいときでも、変換結果を切り捨てることはない。すなわち、変換結果の文字数がフィールド幅より大きい場合、その変換結果を含む幅までフィールドを拡張する。
|