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 にすすむ