Everything

fprintf


書式に従って、ストリーム入出力用ファイルへデータを出力します。

[指定形式]

#include <stdio.h>

long fprintf(FILE *fp, const char *control [, arg] ...);

[引数]

fp ファイルポインタ

control 書式を示す文字列へのポインタ

arg,... 書式に従って出力されるデータの並び

[戻り値]

正常:変換し出力した文字数

異常:負の値

[備考]

fprintf関数は、controlが指す書式を示す文字列に従って、引数argを変換、編集し、ファイルポインタfpの示すストリーム入出力用ファイルへ出力します。

fprintf関数は、通常は変換し出力したデータの個数を返しますが、エラー発生時には負の値を返します。

書式の仕様は以下のとおりです。

 

【書式の概要】

書式を表す文字列は、2種類の文字列から構成されます。

-

通常の文字

次の変換仕様を示す文字列以外の文字はそのまま出力されます。

-

変換仕様

変換仕様は、%で始まる文字列で、後に続く引数の変換方法を指定します。変換仕様の形式は次の規則に従います。

 

この変換仕様に対して、実際に出力する引数が無い時は、その動作は保証しません。また、変換仕様よりも実際に出力する引数の個数が多い時は、余分な引数はすべて無視されます。

 

【変換仕様の説明】

(a)

フラグ

符号を付けるなどの出力するデータに対する修飾を指定します。指定できるフラグの種類と意味を表 7.9に示します。

表 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は取り除きません。

(b)

フィールド幅

変換したデータを出力する文字数を任意の10進数で指定します。

変換したデータの文字数がフィールド幅より少ない時、フィールド幅までそのデータの先頭に空白が付けられます(ただし、フラグとして'-'を指定した時は、データの後に空白が付けられます)。

もし、変換したデータの文字数がフィールド幅より大きい時は、フィールド幅は、変換結果を出力できる幅に拡張されます。

また、フィールド幅指定の先頭が0で始まっている時は、出力するデータの先頭には空白ではなく文字「0」が付けられます。

(c)

精度

表 7.10で説明する変換の種類に従って変換したデータの精度を指定します。

精度は、ピリオド(.)の後に10進整数を続ける形式で指定します。10進整数を省略した時は、0を指定したものと仮定します。

精度を指定した結果、フィールド幅の指定との間に矛盾が生じれば、フィールド幅の指定を無効とします。

各変換の種類と精度指定の意味を以下に示します。

-

d、i、o、u、x、X変換の時

変換したデータの最小の桁数を示します。

-

e、E、f変換の時

変換したデータの小数点以下の桁数を示します。

-

g、G変換の時

変換したデータの最大有効桁数を示します。

-

s変換の時

印字される最大文字数を示します。

(d)

パラメータのサイズ指定

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型へのポインタ型であることを指定します。

(e)

変換文字

変換するデータをどのような形式に変換するかを指定します。

もし、変換するデータが構造体や配列型の時や、それらの型を指すポインタの時は、s変換で文字の配列を変換する時、p変換でポインタを変換する時を除いてその動作は保証しません。

表 7.11に変換文字と変換方式を示します。この表に述べられていない英文字を変換文字として指定した時は、その動作は保証しません。また、それ以外の文字を指定した時の動作はコンパイラによって異なります。

表 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

%

データの変換は生じません。

%を出力します。

なし

 

(f)

フィールド幅あるいは精度に対する*指定

フィールド幅あるいは精度指定の値として*を指定することができます。この時は、この変換仕様に対応するパラメータの値がフィールド幅あるいは精度指定の値として使用されます。このパラメータが負のフィールド幅を持つ時は、正のフィールド幅にフラグ-が指定されたと解釈します。また、負の精度を持つ時は、精度が省略されたものと解釈します。