bsetjmp.h
にもどるbstdlib.h
にすすむbstdio.h
標準関数ライブラリ。C 言語に共通な関数の一部のみサポートしている。
標準入出力とはコンソールの入力/出力を指す。 コンソールを提供していないシステムでは、 これらの標準入出力関数は使用できない。 通常はデバッグ用コンソールが標準入出力になっている。 したがって標準入出力関数は主にデバッグ用に使用される。
標準入出力のファイルへのリダイレクション等の機能はない。
sprintf / vsprintf
は標準入出力を参照しないので、
どのような場合でも使用することができる。
|
int getchar(void)
なし
=EOF ファイル終了、またはエラー ≠EOF 読み込んだ文字
標準入力から 1 文字読み込んで、その文字を返す。
標準入力ストリームでファイルの終りが検出された場合は EOF
を返す。
エラーが発生した場合、 EOF
を返す。
putchar(),gets(),puts()
|
int putchar(int c)
int c 出力する文字(0〜255)
≠EOF 出力した文字 =EOF エラーが発生した
標準出力に 1 文字書き出す。
getchar(),gets(),puts()
|
char* gets(char *s)
char *s 入力文字列格納領域へのポインタ
≠NULL 読み込み文字列格納領域へのポインタ =NULL ファイルの終了、またはエラー
標準入力から文字列を読み込む。
標準入力で文字列の終了とみなす箇所は以下 2 通りである。
改行文字を文字列終了とした場合、改行文字は捨てられ、
s
にはその代りに空白文字 NULL
を付加する。
getchar(),putchar(),puts()
|
int puts(char *s)
char *s 出力文字列
=EOF エラー >0 正常終了
標準出力に文字列を書く。
文字列の終了となる空白文字 NULL
は書かれず、代りに改行文字が付加される。
getchar(),putchar(),gets()
|
int printf(const char *format, ...)
const char format 書式 format以降の引数 format にしたがって変換される文字・数値 引数の個数は書式 format と同じにすること。
≧0 出力文字バイト数(NULL を除く) <0 エラー
書式付きの標準出力を行なう。
書式 format
に対応する実引数が無い場合、動作は不定である。
実引数の方が書式 format
より多い場合、
余分な引数は無視される。
引数の型が、書式中の対応する変換仕様と一致しない場合には、
動作未定義である。
変換により生成される最大文字数の最低値は 509 バイト以上である。
書式 format
で使用される、
入力変換指定を以下に示す。
%[変換修飾フラグ][フィールド幅][数値精度][型変換修飾子][変換指定子]
- |
出力する文字列をフィールド左端に揃える。 指定がない場合、フィールド右端に揃える。 | ||||||||
+ |
数字の前に符号を付ける。 たとえば printf("%+d %+d\n", -123, 123); の出力は次のようになる。 -123 +123 | ||||||||
<space> |
先頭文字が符号の場合、そのまま符号を付けて出力し、
符号が無ければ、空白を付けて出力する。たとえばprintf("% d %d\n", -123, 123);
の出力は次のようになる。-123 123 | ||||||||
# |
数値データ型に対する変換指定子にはすべて使用可能である。 各指定子に対する作用を以下に記述する。
| ||||||||
0 |
変換指定子 d,e,E,f,g,G,i,o,u,x,X の前に 0
が付いた場合、
フィールドを空白の代わりに 0 で埋める。
d,i,o,u,x,X で精度が指示されている場合、
及び - 変換修飾フラグがある場合、には 0 フラグを無視する。
|
文字列をかき出すフィールドの最小幅のことをフィールド幅とする。
変換された文字列がフィールド幅よりも小さければ、
その差を埋めるだけのスペース文字を文字列に付加する。
これをパディングという。
フィールド幅の直前の変換修飾フラグで 0
が指定されていたらスペース文字の代りに 0 をパディングする。
空白文字または 0 をパディングする位置が文字列の前後どちらか、
の指定は変換修飾フラグの指定に従う。
文字列がフィールド幅より大きい場合には、
出力できるだけの幅を確保する。
整数の代りにアスタリスク *
を使用すると、
printf
はそれに対応する引数をフィールド幅として用いる。例えば
char *string = "Here's a number:"; int width = 12; int integer = 123; printf("%s%* d\n", string, width, integer);
というコードは
Here's a number: 123 ~~~~~~~~~~~~スペースが 12 個書かれる
精度は小数点に続く数字で指定する。小数点のみで、後に数字が無い場合、
精度は 0 とみなす。
精度として整数の代りに * を使用すると、
それに対応する引数を精度として用いる。
各変換指定子ごとで精度として n
を指定した場合、
その表現は以下の通りである。
d,i,o,u,x,X 少なくとも n 個の数字を書く e,E,f 小数点の後に n 個の数字を書く g,G,s n 個以上の有効数字は出力しない
フィールド幅を合わせるために必要なパディングの数と、 精度指定を守るために必要なパディングの数とが異なる場合には、 精度指定から求められるものを使用する。たとえば
int foo = 12345; float bar = 12.345; char *baz = "Hello, world"; printf("1: %7.6d\n, foo); printf("2: %7.6f\n, bar); printf("3: %7.6s\n, baz);
の出力は以下のようになる。
1: 012345 2: 12.345000 3: Hello,
d,i,o,u,x,X
の前に書くと、
対応する引数が short int
または
unsigned short int
であることを示す。
変換指定子 n の前に書くと対応する引数が short int
であることを示す。short int
と int
とが同じであるような場合は必要ないが、
移植性の高いコードを書こうとする場合に便利である。
d,i,o,u.x,X
の前に書くと、
対応する引数が long int
または
unsigned long int
であることを示す。
変換指定子 n の前に書くと対応する引数が long int
であることを示す。long int
と int
とが同じであるような場合は必要ないが、
移植性の高いコードを書こうとする場合に便利である。
e,E,f,F,G
の前に書いた場合、
対応する引数が long double
であることを示す。
int
または unsigned int
を 1 文字に変換する。
int
の引数を符号付きの 10 進数表記に変換する。
double
型の引数を指数形式
( [-]d.dddddde+/-dd )
に変換する。
小数点の左側には少なくとも1つの数字を表示し、
右側には精度 ( 既定値 6 桁 ) 分の数字を表示する。
表示精度が 0 の場合、小数点は書き込まない。
e
の代りに E
を使用した
double
の指数指定。
double
型の引数を [-]d.dddddd
の形式の文字列に変換する。
小数点の左側には少なくとも 1 つの数字を表示し、
右側には精度分の数字 ( 既定値 6 桁 ) 分の数字を表示する。
精度が 0 の場合、小数点は書き込まない。
double
型の引数を e
または f
の指定する形式に変換する。
有効数字の指定は、
それぞれ対応する変換指定子で述べた精度と同じである。
通常は f
型の変換を用いる。e
型の変換は、
指数部が -4
より小さいか、
または精度より大きいときに用いる。
g
と同じであるが、E
または f
の指定する変換を選ぶ。
d
と同じ。
printf
が作った引数 format
の、
その時点までに作った文字列の文字数を書く。
これは printf
が作る文字列には影響しない。
int
型の引数を符号なしの 8 進数に変換する。
void
へのポインタを引数としてとり、
文字セットへのポインタに変換して出力する。
生成される文字列は処理系の実装に依存する。
int
型の引数を符号なし10進数文字列に変換する。
int
型の引数を符号なし 16 進数文字列に変換する。
10,11,12,13,14,15 はそれぞれ a,b,c,d,e,f
で表現する。
x
と同じだが 10,11,12,13,14,15 をそれぞれ
A,B,C,D,E,F
で表現する。
e E f g G
) には対応していない。これらの指定は無視する。
h, l
は無視する。
%s, %c
の代わりに %S, %C
を指定した場合、
TC
文字列、TC
文字コードであるとみなし、
EUC に変換した結果を出力する。
|
int sprintf(char *sp, const char *format, ...)
char *sp 変換文字列の格納先 const char format 書式 format以降の引数 format にしたがって変換される文字・数値 引数の個数は書式 format と同じにすること。
≧0 出力文字バイト数(NULL を除く) <0 エラー
変換結果文字列が sp
の指す領域に格納されることを除いて
printf()
と同様である。
書式 format
に対応する実引数が無い場合、
動作は不定である。
実引数の方が書式 format
より多い場合、
余分な引数は無視される。
引数の型が、書式中の対応する変換仕様と一致しない場合には、動作未定義である。
変換により生成される最大文字数の最低値は 509 バイト以上である。
入力変換指定は printf()
を参照のこと。
printf(),vprintf()
|
int vprintf(const char *format, va_list ap)
const char format 書式 va_list ap 引数の配列
≧0 出力文字バイト数(NULL を除く) <0 エラー
書式付きの標準出力を行う。
可変個引数を ap
で置き換えた printf
と同様である。
呼び出し前に va_start
マクロで ap
が初期化されなければならない。
書式 format
に対応する実引数が無い場合、
動作は不定である。
実引数の方が書式 format
より多い場合、
余分な引数は無視される。
引数の型が、書式中の対応する変換仕様と一致しない場合には、
動作未定義である。
変換により生成される最大文字数の最低値は 509 バイト以上である。
入力変換指定は printf()
を参照のこと。
printf(),sprintf()
|
int vsprintf(char *buf, const char *format, va_list ap)
char *buf 結果を保持するためのバッファ const char format 書式 va_list ap 引数の配列
≧0 出力文字バイト数(NULL を除く) <0 エラー
可変個引数を ap
で置き換えた sprintf
と同様である。
呼び出し前に va_start
マクロで ap
が初期化されなければならない。
書式 format
に対応する実引数が無い場合、
動作は不定である。実引数の方が書式 format
より多い場合、余分な引数は無視される。
引数の型が、書式中の対応する変換仕様と一致しない場合には、
動作未定義である。
変換により生成される最大文字数の最低値は 509 バイト以上である。
入力変換指定は printf()
を参照のこと。
printf(),vprintf()
|
void perror(const char *prompt)
const char *prompt エラーメッセージの前置文字列
なし
errno
の値に対するエラーメッセージを標準エラー出力へ書き出す。
prompt
はエラーメッセージの前に付く文字列を指し、
出力時には promt
文字列の後ろにコロン :
を出力する。
たとえば
perror("err");
とすると、以下の文字列が、エラーメッセージの前に付く。
err:
prompt
が NULL
の場合メッセージの前には何も付かない。
|
void panic(const char *prompt)
const char *prompt エラーメッセージの前置文字列
なし
errno
の値に対するエラーメッセージを標準エラー出力へ書き出し、
処理を終了する。
prompt
はエラーメッセージの前に付く文字列を指し、
出力時には promt
文字列の後ろにコロン :
を出力する。
たとえば
perror("err");
とすると、以下の文字列が、エラーメッセージの前に付く。
err:
prompt
が NULL
の場合メッセージの前には何も付かない。
bsetjmp.h
にもどるbstdlib.h
にすすむ