書式に従って、ストリーム入出力用ファイルへデータを出力します。
[指定形式]
#include <stdio.h>
long fprintf(FILE *fp, const char *control [, arg] ...);
[引数]
fp ファイルポインタ
control 書式を示す文字列へのポインタ
arg,... 書式に従って出力されるデータの並び
[戻り値]
正常:変換し出力した文字数
異常:負の値
[備考]
fprintf関数は、controlが指す書式を示す文字列に従って、引数argを変換、編集し、ファイルポインタfpの示すストリーム入出力用ファイルへ出力します。
fprintf関数は、通常は変換し出力したデータの個数を返しますが、エラー発生時には負の値を返します。
書式の仕様は以下のとおりです。
【書式の概要】
書式を表す文字列は、2種類の文字列から構成されます。
次の変換仕様を示す文字列以外の文字はそのまま出力されます。
変換仕様は、%で始まる文字列で、後に続く引数の変換方法を指定します。変換仕様の形式は次の規則に従います。
この変換仕様に対して、実際に出力する引数が無い時は、その動作は保証しません。また、変換仕様よりも実際に出力する引数の個数が多い時は、余分な引数はすべて無視されます。
【変換仕様の説明】
符号を付けるなどの出力するデータに対する修飾を指定します。指定できるフラグの種類と意味を表 7.9に示します。
|
|
|
1
|
-
|
変換したデータの文字数が指定したフィールド幅より少ない時、そのデータをフィールド内で左詰めにして出力します。
|
2
|
+
|
符号付きのデータに変換する時、そのデータの符号に従って、変換したデータの先頭にプラスあるいはマイナス符号を付けます。
|
3
|
空白
|
符号付きのデータの変換において、変換したデータの先頭に符号が付かない時、そのデータの先頭に空白を付けます。
「+」と共に使用した時、本フラグは無視されます。
|
4
|
#
|
表6.10で説明する変換の種類に従って、変換後のデータに修飾を行います。
1. c、d、i、s、u変換の時
本フラグは無視されます。
2. o変換の時
変換したデータの先頭に0を付けます。
3. x(あるいはX)変換の時
変換したデータの先頭に0x(あるいは0X)を付けます。
4. e、E、f、g、G変換の時
変換したデータに小数点以下がない時でも、小数点を出力します。
また、g、G変換の時は、変換後のデータの後に付く0は取り除きません。
|
変換したデータを出力する文字数を任意の10進数で指定します。
変換したデータの文字数がフィールド幅より少ない時、フィールド幅までそのデータの先頭に空白が付けられます(ただし、フラグとして'-'を指定した時は、データの後に空白が付けられます)。
もし、変換したデータの文字数がフィールド幅より大きい時は、フィールド幅は、変換結果を出力できる幅に拡張されます。
また、フィールド幅指定の先頭が0で始まっている時は、出力するデータの先頭には空白ではなく文字「0」が付けられます。
表 7.10で説明する変換の種類に従って変換したデータの精度を指定します。
精度は、ピリオド(.)の後に10進整数を続ける形式で指定します。10進整数を省略した時は、0を指定したものと仮定します。
精度を指定した結果、フィールド幅の指定との間に矛盾が生じれば、フィールド幅の指定を無効とします。
各変換の種類と精度指定の意味を以下に示します。
変換したデータの最小の桁数を示します。
変換したデータの小数点以下の桁数を示します。
変換したデータの最大有効桁数を示します。
印字される最大文字数を示します。
d、i、o、u、x、X、e、E、f、g、G変換の時(表 7.10参照)
変換するデータのサイズ(short型、long型、long long型、long double型)を指定します。これ以外の変換の時は、本指定を無視します。表 7.10にサイズ指定の種類とその意味を示します。
表 7.10 | パラメータのサイズ指定の種類とその意味 |
|
|
|
1
|
hh
|
d、i、o、u、x、X、a、A、e、E、f、F、gおよびG変換において、変換するデータがsigned char型あるいはunsigned char型であることを指定します。n変換において、変換するデータがsigned char型へのポインタ型であることを指定します。
|
2
|
h
|
d、i、o、u、x、X変換において、変換するデータがshort型あるいはunsigned short型であることを指定します。n変換において、変換するデータがshort型へのポインタ型であることを指定します。
|
3
|
l
|
d、i、o、u、x、X変換において、変換するデータがlong型、unsigned long型あるいは、double型であることを指定します。
|
4
|
L
|
e、E、f、g、G変換において、変換するデータがlong double型であることを指定します。
|
5
|
ll
|
d、i、o、u、x、X変換において、変換するデータがlong long型あるいは、unsigned long long型であることを指定します。n変換において、変換するデータがlong long型へのポインタ型であることを指定します。
|
6
|
j
|
d、i、o、u、x、X変換において、変換するデータがintmax_t型あるいは、uintmax_t型であることを指定します。n変換において、変換するデータがsize_t型へのポインタ型であることを指定します。
|
7
|
z
|
d、i、o、u、x、X変換において、変換するデータがsize_t型あるいは、size_t型に対応する符号付き整数型であることを指定します。n変換において、変換するデータがsize_t型へのポインタ型であることを指定します。
|
8
|
t
|
d、i、o、u、x、X変換において、変換するデータがptrdiff_t型あるいは、ptrdiff_t型に対応する符号なし整数型であることを指定します。n変換において、変換するデータがptrdiff_t型へのポインタ型であることを指定します。
|
変換するデータをどのような形式に変換するかを指定します。
もし、変換するデータが構造体や配列型の時や、それらの型を指すポインタの時は、s変換で文字の配列を変換する時、p変換でポインタを変換する時を除いてその動作は保証しません。
表 7.11に変換文字と変換方式を示します。この表に述べられていない英文字を変換文字として指定した時は、その動作は保証しません。また、それ以外の文字を指定した時の動作はコンパイラによって異なります。
|
|
|
|
|
|
1
|
d
|
d変換
|
int型データを符号付き10進数の文字列に変換します。d変換とi変換は同じ仕様です。
|
int型
|
精度指定は、最低で何文字出力されるかを示しています。もし、変換後の文字数が精度の値より少ない時は、文字列の先頭に0が付きます。また、精度を省略した時は、1が仮定されます。さらに、0の値を持つデータを精度に0を指定して変換し出力しようとした時は、何も出力されません。
|
2
|
i
|
i変換
|
int型
|
3
|
o
|
o変換
|
int型データを符号なしの8進数の文字列に変換します。
|
int型
|
4
|
u
|
u変換
|
int型データを符号なしの10進数の文字列に変換します。
|
int型
|
5
|
x
|
x変換
|
int型データを符号なしの16進数に変換します。16進文字にはa、b、c、d、e、fを用います。
|
int型
|
6
|
X
|
X変換
|
int型データを符号なしの16進数に変換します。16進文字にはA、B、C、D、E、Fを用います。
|
int型
|
7
|
f
|
f変換
|
double型データを「[-]ddd.ddd」の形式の10進数の文字列に変換します。
|
double型
|
精度の指定は、小数点以降の桁数を表します。小数点以降の文字が存在する時には、必ず小数点の前に1桁の数字が出力されます。精度を省略した時は、6が仮定されます。また、精度に0を指定した時は、小数点と小数点以降の文字は出力しません。出力するデータは丸められます。
|
8
|
F
|
F変換
|
double型
|
9
|
e
|
e変換
|
double型データを「[-]d.ddde±dd」の形式の10進数の文字列に変換します。指数は、少なくとも2桁出力されます。
|
double型
|
精度の指定は、小数点以降の桁数を表します。変換した文字は小数点の前に1桁の数字が出力され、小数点以降に精度に等しい桁数の数字が出力される形式となります。精度を省略した時は6が仮定されます。また、精度に0を指定した時は、小数点以降の文字は出力しません。出力するデータは丸められます。
|
10
|
E
|
E変換
|
double型データを「[-]d.dddE±dd」の形式の10進数の文字列に変換します。指数は、少なくとも2桁出力されます。
|
double型
|
11
|
g
|
g変換(あるいはG変換)
|
変換する値と有効桁数を指定する精度の値からf変換の形式で出力するかe変換(あるいはE変換)の形式で出力するかを決めdouble型データを出力します。もし、変換されたデータの指数が-4より小さいか、有効桁数を指定する精度より大きい時にはe変換(あるいはE変換)の形式に変換します。
|
double型
|
精度の指定は、変換されたデータの最大有効桁数を示します。
|
12
|
G
|
double型
|
13
|
a
|
a変換
|
double型データを「[-]0xh.hhhhp±d」の形式の16進数の文字列に変換します。指数は、少なくとも1桁出力されます。
|
double型
|
精度の指定は、小数点以降の桁数を表します。変換した文字は小数点の前に1桁の数字が出力され、小数点以降に精度に等しい桁数の数字が出力される形式となります。精度を省略した時は、正確な値を表現するのに充分な精度が仮定されます。また、精度に0 を指定した時は、小数点以降の文字は出力しません。出力するデータは丸められます。
|
14
|
A
|
A変換
|
double型データを「[-]0Xh.hhhhP±d」の形式の16進数の文字列に変換します。指数は、少なくとも1桁出力されます。
|
double型
|
15
|
c
|
c変換
|
int型のデータをunsigned char型データとし、そのデータに対応する文字に変換します。
|
int型
|
精度の指定は無効です。
|
16
|
s
|
s変換
|
char型へのポインタ型データが指す文字列を文字列の終了を示すヌル文字まで、あるいは、精度で指定された文字数分出力します(ただしヌル文字は出力されません。また、空白、水平タブ、改行文字は変換文字列に含まれません)。
|
char型へのポインタ型
|
精度の指定は出力する文字数を示します。もし、精度が省略された時は、データが指す文字列のヌル文字までの文字が出力されます(ただし、ヌル文字は出力されません。また、空白、水平タブ、改行文字は変換文字列に含まれません)。
|
17
|
p
|
p変換
|
データをポインタとして、コンパイラごとに定義された印字可能な文字列に変換します。
|
void型へのポインタ
|
精度の指定は無効です。
|
18
|
n
|
データの変換は生じません。
|
データはint型へのポインタ型とみなされ、このデータが指す記憶域にいままで、出力したデータの文字数を設定します。
|
int型へのポインタ型
|
|
19
|
%
|
データの変換は生じません。
|
%を出力します。
|
なし
|
|
フィールド幅あるいは精度指定の値として*を指定することができます。この時は、この変換仕様に対応するパラメータの値がフィールド幅あるいは精度指定の値として使用されます。このパラメータが負のフィールド幅を持つ時は、正のフィールド幅にフラグ-が指定されたと解釈します。また、負の精度を持つ時は、精度が省略されたものと解釈します。