C言語標準関数リファレンス 青木 茂  プログラミングをしていて,ぶ厚いマニュアルを開くのは面倒なものである. こ のような用途に対し, "Standard C handbook"(Microsoft press) という便利な本 があるが, 日本語版は大きくなってしまい意味がない. そこでC言語のANSI標準 関数についてまとめてみた. コメントは多少(?)主観的に流れたかもしれないが, 実用的であることを第一に心がけ, なるべく体系的な説明をつけるよう勤めたつ もりである. 各関数の戻り値については特に注意を払った. また,標準でない関数 についても,以下の知識があれば容易に理解できよう.  筆者の知識・経験の不足から舌足らずなところもあるかもしれないが, ご容赦 頂きたい(locale,errno,time等に詳しい方は,是非お教えください). 表記はバラ バラで,C以外の言語の表記も適宜取り入れた.  このドキュメントは,finおよびtblを用いて作成した. 作者の山田祥平氏ならび に岩本明氏に心から感謝する. <参考文献> ・インターフェース1991年9月号 ・Turbo C++ Library reference Vol.1 ・Brian.W.Kernighan & Dennis.M.Ritchie "The C programming language" #include void assert(int test);  testが偽の時abortするマクロ. #include int isalnum(int c);  英数字を識別する. int isalpha(int c);  アルファベットを識別する. int isctrl(int c);  制御文字を識別する. int isdigit(int c);  数字を識別する. int isgraph(int c);  スペース以外の印字可能文字を識別する. int islower(int c);  小文字を識別する. int isprint(int c);  スペースを含む印字可能文字を識別する. int ispunct(int c);  スペース以外の記号を識別する. int isspace(int c);  空白文字を識別する.  空白文字:' ','\t','\f','\n','\r','\v' int isupper(int c);  大文字を識別する. int isxdigit(int c);  16進数を構成する文字を識別する. int tolower(int c);  小文字に変換する. int toupper(int c);  大文字に変換する. #include struct lconv *localeconv(void);  地域情報を得る. これがマトモにインプリメントされている処理系を,少 なくとも私は知らない. どう使うのだかよく解らない. あしからず. char *setlocale(int categoly,const char *locale);  地域情報を設定する. これも良く解らない. Kernighanさん,ごめんなさ い. 非英語圏の住民として感じるのだが,果してこれらの関数は役に立つの だろうか. 無節操にローカライズをしてきたむくいではあるが,日本ではた いして価値がない. ヨーロッパでは便利かも知れない. #include double acos(double x);  xのアークコサインを返す.xが[-1,+1]の範囲にないときはエラー. double asin(double x);  xのアークサインを返す.xが[-1,+1]の範囲にないときはエラー. double atan(double x)  xのアークタンジェントを返す. double atan2(double x,double y)  y/xのアークタンジェントを返す. double ceil(double x);  xの天井を返す. double cos(double x);  xのコサインを返す. double cosh(double x);  xのハイパボリックコサインを返す. double exp(double x);  指数関数e^xを返す. double fabs(double x);  xの絶対値を返す. double floor(double x);  xの床を返す. double frexp(double x,int *n);  x=m*2^nを満たすm,nを計算し,mを返す.nはポインタで渡される. double ldexp(double x,int n);  x*2^nを返す. double log(double x);  xの自然対数を返す. double log10(double x);  xの常用対数を返す. double modf(double value,double *iptr);  xの小数部を返し,*iptrに整数部を渡す. double pow(double x,double y);  x^yを返す. double sin(double x);  xのサインを返す. double sinh(double x);  xのハイパボリックサインを返す. double sqrt(double x);  xの平方根を返す.x<0のときエラー. double tan(double x);  xのタンジェントを返す. double tanh(double x);  xのハイパボリックタンジェントを返す. #include void longjmp(jmp_buf env,int ret);  先にenvを引数にsetjmpを呼び出した状態に戻る.その後,setjmpはretを 返す. retとして0を渡すと1に置き換えられる. オーバレイや割込が絡むと ややこしいことになるので,要注意. int setjmp(jmp_buf env);  envに現在のCPU情報をセーブする. longjmpから飛んできたのでないとき, 0を返す. #include int raise(int sig);  シグナルsigを発行する. 成功すれば0を返す. void (*signal(int sig,void (*func)(int)))(int);  おそらく標準関数中もっともプロトタイプの訳の解らん関数. シグナル sigに対応するハンドラを設定する. 標準ハンドラには次のものがある. |======================================| |関数ポインタ 動作 | |--------------------------------------| |SIG_DFL プログラム終了 | |SIG_IGN 無視 | |SIG_ERR signalからエラーリターン | |======================================|  シグナルもいろいろ定義されているが, 普通はユーザ割込(SIGINT)を知 っていれば良かろう. #include type *va_arg(va_list ap,type);  apの示す引数リストからtype型の引数を取り出すマクロ. void va_end(va_list ap);  可変個の引数リストを使った後の後始末をする. void va_start(va_list ap,lastfix);  apに可変個の引数リストをセットする. lastfixには最後の固定引数を渡 すこと. #include void clearerr(FILE *stream);  streamのエラーインジケータとEOFインジケータをクリアする. int fclose(FILE *stream);  streamをクローズする. バッファの内容はフラッシュされる. 成功すれ ば0,失敗ならばEOFを返す. int feof(FILE *stream);  直前のstreamに対する操作(読み出し)でEOFが検出されている時,真を返 す. int ferror(FILE *stream);  直前のstreamに対する操作でエラーが検出されている時,真を返す. int fflush(FILE *stream);  streamへのバッファをフラッシュする. オープンモードが書き込みのと きはバッファの内容は書き出され, 読み出しのときはバッファの内容は破 棄される. クローズは行われない. 成功すれば0,失敗ならばEOFを返す. int fgetc(FILE *stream);  streamから1文字読み出す. 失敗ならばEOFを返す. int fgetpos(FILE *stream,fpos_t *pos);  streamの現在のファイル・ポインタの値を返す. 成功すれば0,失敗なら ば0以外の値を返す. char *fgets(char *s,int n,FILE *stream);  streamから1行(改行文字まで)もしくはn-1文字読み込み, sで示される バッファに格納する. 格納される文字列には'\0'が付加される. 成功すれ ば文字列sを,失敗ならばNULLを返す. FILE *fopen(const char *filename,const char *mode);  filenameの示すファイルをオープンし,ストリームに結び付ける. 成功す ればストリームへのポインタ,失敗ならばNULLを返す.  modeには次の値が指定できる. |====================================================================| |モード 解説 | |--------------------------------------------------------------------| |r 読み出しのみ. | |w 書き込み.ファイルが存在するときは上書きする. | |a 追加.ファイルが存在しないときは書き込み. | |r+ 既存のファイルを更新(r/w). | |w+ 新しいファイルを更新(r/w).ファイルが存在するときは上書きする.| |====================================================================| int fprintf(FILE *stream,const char *format,...);  書式付stream出力. 成功すれば出力バイト数,失敗ならばEOFを返す. int fputc(int c,FILE *stream);  streamに文字cを出力する. 成功すれば文字c,失敗ならばEOFを返す. int fputs(const char *s,FILE *stream);  streamにASCZI文字列sを出力する. ただし,'\0'は出力されず,改行文字 の追加も行わない(はず). 成功すれば最後に出力した文字,失敗ならばEOF を返す. size_t fread(void *ptr,size_t size,size_t n,FILE *stream);  sizeの大きさを持つオブジェクトをn個streamから読み込み, ptrの示す 領域に格納する. 実際に読み込んだオブジェクトの数を返す. FILE *freopen(const char *filename,const char *mode,FILE *stream);  streamをクローズし,指定したファイルをオープンしてstreamに結び付け る. オープンが成功しようとしまいと,元のファイルはクローズされる. 成 功すればストリームへのポインタ,失敗ならばNULLを返す.  modeについてはfopen参照. int fscanf(FILE *stream,const char *format,...);  書式付stream出力. 格納に成功した入力フィールド数を返す. ただし,入 力中EOFを検出した場合はEOFを返す. int fseek(FILE *stream,long offset,int origin);  streamのファイルポインタをoriginの示す位置からoffsetだけはなれた ところへ移動する. originには次の値が指定できる. ===================== origin ファイルの位置 --------------------- 0 ファイルの先頭 1 現在の位置 2 ファイルの終り =====================  ungetcでプッシュバックされた文字は捨てられ, EOFインジケータもクリ アされる. 成功すれば0,失敗ならば0以外の値を返す. int fsetpos(FILE *stream,const fpos_t *pos);  streamのファイルポインタをposで示される場所にセットする. ungetcで プッシュバックされた文字は捨てられ, EOFインジケータもクリアされる.  成功すれば0,失敗ならば0以外の値を返す. long ftell(FILE *stream);  streamのファイルポインタを返す. 戻り値はfseekの引数に使用できる. エラーの場合,-1Lを返す. size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream);  sizeの大きさを持つオブジェクトをn個, ptrの示す領域からstreamへ書 き出す. 実際に書き込んだオブジェクトの数を返す. int getc(FILE *stream);  streamから1文字読み込む. 失敗ならば,EOFを返す. int getchar(void);  stdinから1文字読み込む. 失敗ならば,EOFを返す. char *gets(char *s);  stdinから1行(改行文字まで)読み込み, sで示されるバッファに格納す る. 格納される文字列には'\0'が付加される. 成功すれば文字列sを,失敗 ならばNULLを返す. void perror(const char *s);  文字列sを出力し,errnoに対応するエラーメッセージも出力する. 出力は stderrに対して行われる. sには普通プロセスネームを指定する. int printf(const char *format,...);  いわずと知れたprintf. くわしい説明の必要もなかろう. 成功すれば出 力バイト数,失敗ならばEOFを返す. int putc(int c,FILE *stream);  streamに文字cを出力する. 成功すれば文字c,失敗ならばEOFを返す. int putchar(void);  stdoutに文字cを出力する. 成功すれば文字c,失敗ならばEOFを返す. int puts(const char *s);  ASCIZ文字列sをstdoutに出力する. このとき,最後に改行文字を付加する. 失敗ならば,EOFを返す. int remove(const char *filename);  filenameの示すファイルを削除する. オープンされているファイルに対 して実行してはならない. 成功すれば0,失敗ならば-1を返す. int rename(const char *oldname,const char *newname);  ファイル名をoldnameからnewnameに変更する. 成功すれば0,失敗ならば -1を返す. void rewind(FILE *stream);  streamのファイルポインタをファイルの先頭に移動し, エラーインジケ ータとEOFインジケータをクリアする. バッファをクリアするという使い方 もある. int scanf(const char *format,...);  恐怖のscanf. プロやプロを目指すプログラマは,こんなおぞましい関数 を使ってはならない. 格納に成功した入力フィールド数を返す. ただし,入 力中EOFを検出した場合はEOFを返す. void setbuf(FILE *stream,char *buf);  streamの使用するバッファとしてbufを指定する. bufにNULLを指定する と,バッファリングを行わなくなる. それ以外の場合,バッファはBUSIZバイ ト確保されていることが要求される. 当然のことながら,タイミングによっ ては悲惨な結果が待ち受けている. fopenやfseek等の直後で, バッファが 空であることが保証されている時のみに使用すべきである. void setvbuf(FILE *stream,char *buf,int type,size_t size);  streamの使用するバッファとしてbufを指定する. bufにNULLを指定する と,mallocによって自動的にバッファを確保する. sizeによってバッファ朝 を指定できる.  typeによってバッファリング動作を指定する. ================================ type 動作 -------------------------------- _IOFBF 完全なバッファ動作. _IOLBF 行毎にバッファリングする. _IONBF バッファリングしない. ================================  成功すれば0,失敗ならば0以外の値を返す. setbufと同様の注意が必要. int sprintf(char *s,const char *format,...);  データ列を書式化し,sの示すバッファに格納する. 成功すればsのバイト 数,失敗ならばEOFを返す. int sscanf(char *s,const char *format,...);  文字列sからデータをとりだし,データ列として格納する. 格納に成功し た入力フィールド数を返す. ただし,入力中'\0'を検出した場合はEOFを返 す. FILE *tmpfile(void);  テンポラリファイルを作り,更新モード("w+")でオープンする. このファ イルは,クローズ時もしくはプロセス終了時に自動的に消滅する. 成功すれ ばストリームへのポインタ,失敗ならばNULLを返す. char *tmpnam(char *s);  テンポラリファイルとして使用可能なユニークなファイル名を作る. 最 大TMP_MAX回使用可能である. sにNULLを指定した場合にはstaticなバッフ ァを,それ以外の場合はsを返す. tmpfileのように自動的にファイルを削除 する機能はない. int ungetc(int c,FILE *stream);  文字cをstreamにプッシュバックする. 連続使用は出来ない(以前の文字 がキャンセルされる). fflush,fseek,fsetpos,rewindもプッシュバックし た文字をキャンセルする. 成功すれば文字c,失敗ならばEOFを返す. int vfprintf(FILE *stream,const char *format,va_list args); int vprintf(const char *format,va_list args); int vsprintf(char *s,const char *format,va_list args);  以上の関数は引数として引数リストとる他はvのつかない関数と同機能で ある. 使用の際には,をインクルードすることが必要. それにし ても,なんでANSIにはv..scanf系の関数が定義されていないのだろう. #include void abort(void);  stderrに異常終了の旨を書きだし, 終了コード3を親プロセスに渡してプ ロセスを中断する. int atexit(void (*func)(void));  プロセス終了時に起動する関数を登録する. LIFO方式で実行される. す なわち,最後に登録した関数を最初に実行する. 成功すれば0,失敗ならば0 以外の値を返す. void exit(int status);  終了コードstatusを親プロセスに渡してプロセスを終了する. int system(const char *s);  文字列sをOSのコマンドとして実行する. 成功すれば0,失敗ならば-1を返 す. void *calloc(size_t n,size_t size);  sizeの大きさを持つオブジェクトをn個格納できる領域をメモリ上に確保 し, 0でクリアする. 成功すれば領域を示すポインタ,失敗ならばNULLを返 す. void free(void *ptr);  以前にcalloc,malloc,reallocで割り当てた領域を解放する.  解放された領域がどうなるかは未定義である. 仮想記憶を装備した環境 では,捨てられるのが普通であるようだが, メモリを再利用できるOS上でも 再利用しない処理系が多い. 嘆かわしいことである. void *malloc(size_t siz);  sizeバイトの領域を確保する. 成功すれば領域を示すポインタ,失敗なら ばNULLを返す. void *realloc(void *ptr,size_t size);  以前にcalloc,malloc,reallocで割り当てた領域の大きさを変更する. p trがNULLの時はmallocと同じ動作をする. 再割り当てによって領域が移動 する場合,データは新しい領域にコピーされる. 成功すれば領域を示すポイ ンタ,失敗ならばNULLを返す. int abs(int x);  整数xの絶対値を返す. div_t div(int n,int d);  商と剰余を求める. 戻り値は次のような形をしている. typedef struct{ int quot; int rem; } div_t; long labs(long x);  整数xの絶対値を返す. ldiv_t ldiv(long n,long d);  商と剰余を求める. 戻り値は次のような形をしている. typedef struct{ long quot; long rem; } ldiv_t; double atof(const char *s);  文字列sを浮動小数点数に変換する. sはE形式や+INF,-INF,+NAN,-NANで あってもよい. オーバーフローしたとき,HUGE_VALを返す. int atoi(const char *s);  文字列sを整数に変換する. オーバーフローという現実に背を向けている ので,気易く呼んではならない. 認識できないときには0を返す. int atol(const char *s);  文字列sを整数に変換する. 認識できないときには0を返す. double strtod(const char *s,char **endptr);  文字列sを浮動小数点数に変換する. sはE形式や+INF,-INF,+NAN,-NANで あってもよい. endptrがNULLでないとき,*endptrに解釈を中止した文字を 示すポインタを渡す. オーバーフローしたとき,HUGE_VALを返す. long strtol(const char *s,char **endptr,int radix);  文字列sを整数に変換する. endptrがNULLでないとき,*endptrに解釈を中 止した文字を示すポインタを渡す. radixには基数を指定する. radixが0の 時は,次のように解釈される. ======================= 第1字 第2字 解釈 ----------------------- 0 1..7 8進数 0 xまたはX 16進数 1..9 10進数 =======================  認識できないときには0を返す. unsigned long strtoul(const char *s,char **endptr,int radix);  strtolとほぼ同じだが,返す値はunsigned longである. void *bsearch(void *key,void *table,size_t n,size_t size,int (*cmp)());  sizeの大きさを持つオブジェクトn個からなる配列tableの中から, 最初 にkeyと一致するものを二分探索によって検索し, これを示すポインタを返 す. この際,比較関数(*cmp)(void *elm1,void *elm2)を呼び出す. =================== 条件 戻り値 ------------------- elm1 < elm2 負 elm1 == elm2 0 elm1 > elm2 正 ===================  keyと一致するオブジェクトが存在しないときは,0を返す. アルゴリズム より自明だが,tableの内容はあらかじめソートされている必要がある. qs ortと組み合せて使うのが普通である.  なお,上のプロトタイプではconstを省略してある. char *getenv(const char *varname);  varnameと結び付いた環境変数を返す. 指定した環境変数がなければ,戻 り値はNULLである.  この関数の戻り値によって環境を変更することは出来ない. その目的の ために,多くの処理系ではputenvなる関数をインプリメントしているが, こ の関数に標準形はない. なぜなら,環境変数の扱いはOSによってまちまちで あり, 読み出すことぐらいしか標準化した手続きにはならないのである. int qsort(void *table,size_t n,size_t size,int (*comp)());  sizeの大きさを持つオブジェクトn個からなる配列tableを整列する. こ の際,比較関数(*cmp)(void *elm1,void *elm2)を呼び出す. アルゴリズム はクイックソートである. =================== 条件 戻り値 ------------------- elm1 < elm2 負 elm1 == elm2 0 elm1 > elm2 正 ===================  なお,上のプロトタイプではconstを省略してある. int rand(void);  [0,RAND_MAX]の範囲内の疑似乱数を発生する. void srand(unsigned seed);  randで発生する疑似乱数の系列を初期化する. int mblen(const char *s,size_t n); int mbstowcs(wchar_t *wcs,const char *s,size_t n); int mbtowc(wchar_t *wc,const char *s,size_t n); size_t wcstombs(char *s,const wchar_t *wcs,size_t n); int wctomb(char *s,wchar_t wchar);  おもに日本向けと思われるマルチバイトワイド文字列操作関数だが, 手 元に対応した処理系がないのでどのような動作をするか確認できない. ど ちらかと言うとEUCを意識した規格ではなかろうか. #include char *strcat(char *dest,char *src);  ASCIZ文字列dstにsrcのコピーを追加する. destには充分な領域が確保さ れていなければならない. 戻り値は,連結された文字列を示すポインタであ る. char *strchr(const char *s,int c);  文字列sの中で文字cを検索し, 見つかればその位置へのポインタを, 見 つからなければNULLを返す. '\0'も文字列の一部と見なされる. int strcmp(const char *s1,const char *s2);  文字列s1とs2とを比較する. =============== 条件 戻り値 --------------- s1 < s2 負 s1 == s2 0 s1 > s2 正 =============== int strcoll(const char *s1,const char *s2);  文字列s1とs2とを地域情報にしたがって比較する. locale関係の関数で ある.知らぬが仏かもしれない. int strcpy(char *dest,const char *src);  ASCIZ文字列srcをdestにコピーする. destには充分な領域が確保されて いなければならない. size_t strcspn(const char *s1,const char *s2);  文字列s1のうち,s2に含まれていない文字のみからなる,最初の部分の長 さを返す. char *strerror(int errnum);  errnumに対応するエラーメッセージ文字列への静的ポインタを返す. size_t strlen(const char *s);  ASCIZ文字列sの長さを計算する. char *strncat(char *dest,const char *src,size_t n);  ASCIZ文字列dstにsrcのコピーを最大n文字追加する. destには充分な領 域が確保されていなければならない. 戻り値は,連結された文字列を示すポ インタである. int strncmp(const char *s1,const char *s2,size_t n);  文字列s1とs2とを最初のn文字だけ比較する. int strncpy(char *dest,const char *src,size_t n);  ASCIZ文字列srcをdestに最初のn文字だけコピーする. char *strpbrk(const char *s1,const char *s2);  文字列s1の中で,s2に含まれる文字を検索し, 見つかればその位置へのポ インタを, 見つからなければNULLを返す. char *strrchr(const char *s,int c);  文字列sの中で文字cを後ろから検索し, 見つかればその位置へのポイン タを, 見つからなければNULLを返す. '\0'も文字列の一部と見なされる. size_t strspn(const char *s1,const char *s2);  文字列s1のうち,s2に含まれている文字のみからなる,最初の部分の長さ を返す. char *strstr(const char *s1,const char *s2);  文字列s1の中で,文字列s2を検索し, 見つかればその位置へのポインタを, 見つからなければNULLを返す. char *strtok(char *s,const char *sep);  分離文字列sep中の文字をデリミタとして, sの中からトークンを切り出 す. トークンがあればそのポインタを,なければNULLを返す. sにNULLを入 力することにより,トークンがなくなるまで連続使用が可能で, その間にs epを変化させてもよい. size_t strxfrm(char s1,const char *s2,size_t n);  これもlocaleの絡む関数. 知らぬが仏である. void *memchr(const void *buf,int c,size_t n);  nバイトのメモリブロックbufの中で文字cを検索し, 見つかればその位置 へのポインタを, 見つからなければNULLを返す. int memcmp(const void *buf1,const void *buf2,size_t n);  メモリブロックbuf1とbuf2とを最初のnバイト比較する. =================== 条件 戻り値 ------------------- buf1 < buf2 負 buf1 == buf2 0 buf1 > buf2 正 =================== void *memcpy(void *dest,const void *src,size_t n);  nバイトのメモリブロックsrcをdestにコピーする. ブロックが重複して いる場合,うまく動かなくてもよい. ANSIの不条理の一つである. destを返 す. void *memmove(void *dest,const void *src,size_t n);  nバイトのメモリブロックsrcをdestにコピーする. ブロックが重複して いても正確にコピーされる. まさにANSIの不条理である. destを返す. void *memset(void *buf,int c,size_t n);  nバイトのメモリブロックbufの先頭のnバイトを文字cで埋めつくす. bu fを返す. #include char *asctime(const struct tm *t);  *tに格納された時刻情報を文字列に変換し, それを示すポインタを返す. 文字列は静的領域にある. clock_t clock(void);  プロセス開始から経過したプロセッサタイムを返す. 秒単位に変換する にはCLOCK_PER_SECで割ればよい. 2つのイベント間の時間を計測するのに 使う. char *ctime(const time_t *t);  time関数によって得られる値tを文字列に変換し, それを示すポインタを 返す. 文字列は静的領域にある. long型のグローバル変数timezoneにGMTと 地方時との差を秒単位でセットしておくこと. また,グローバル変数dayli ghtが0以外のとき,夏時間となる. double difftime(time_t t2,time_t t1);  t1からt2までの経過時間を秒単位で返す. struct tm *gmtime(const time_t *t);  *tをGMTに変換し,tm構造体へのポインタを返す. long型のグローバル変 数timezoneにGMTと地方時との差を秒単位でセットしておくこと. また,グ ローバル変数daylightが0以外のとき,夏時間となる. struct tm *localtime(const time_t *t);  *tを地方時に変換し,tm構造体へのポインタを返す. long型のグローバル 変数timezoneにGMTと地方時との差を秒単位でセットしておくこと. また, グローバル変数daylightが0以外のとき,夏時間となる. time_t mktime(struct tm *t);  tm構造体*tをtime_t構造体に変換する. size_t strftime(char *s,size_t size,char *format,struct tm *t);  formatに従ってtの示す時刻を書式化し,sの示す文字列に格納する. 文字 列の最大長はsizeで指定する. ============================================================= 指定 置き換え後 ------------------------------------------------------------- %% 文字% %a 曜日の省略形 %A 曜日の正式名 %b 月の省略形 %B 月の正式名 %c 日付と時刻 %d 月内の日付(01..31) %H 時刻(00..23) %I 時刻(01..12) %j 年内の通し日数(001..366) %m 月(10進数) %M 分(00..59) %p AMまたはPM %S 秒(00..59) %U 日曜を週の1日目として年初から数えたときの週番号(00..52) %w 曜日(日曜が0,0..6) %W 月曜を週の1日目として年初から数えたときの週番号(00..52) %x 日付 %X 時刻 %y 西暦年の下2桁 %Y 西暦年 %Z 時間帯名(設定されていなければ何も入らない) =============================================================  なお,上のプロトタイプではconstを省略してある. time_t time(time_t *tp);  tpがNULLでなければ,GMTの1970年1月1日からの経過時間を*ptに渡す. ------------------------------------------------------------------------ 付表1:printfの書式 ------------------------------------------------------------------------ %[flag][width][prec][mod]type ========================================= 意味 ========================================= flag - 左詰め + 符号を付加 '_' 数値の前にスペースを付加 # 代替形式を指定 ----------------------------------------- width n フィールド幅の指定 0n 不足分の左側を0で埋める * 次の引数(int)で指定 ----------------------------------------- prec 省略 整 数:1 実 数:6 .0 実 数:小数部を表示しない .n 実 数:小数部桁数を指定 文字列:表示する文字数を指定 .* 次の引数(int)で指定 ----------------------------------------- mod h short intを表す l long intまたはdoubleを表す ----------------------------------------- type c 1文字 d 符号つき10進整数 e,E 符号つき実数,指数形式 f,F 符号つき実数,浮動小数点形式 g,G eまたはf(精度により自動切り替) i 符号つき10進整数 n 整数へのポインタ o 符号なし8進整数 p ポインタ s 文字列 u 符号なし10進整数 x,X 符号なし16進整数 ========================================= ------------------------------------------------------------------------ 付表2:scanfの書式 ------------------------------------------------------------------------ %[flag][width][mod]type ======================================== 意味 ======================================== flag * 指定フィールドのデータを捨てる ---------------------------------------- width n フィールド最大幅の指定 ---------------------------------------- mod h short intを表す l long intまたはdoubleを表す ---------------------------------------- type c 1文字 d 符号つき10進整数 e,E 符号つき実数,指数形式 f,F 符号つき実数,浮動小数点形式 g,G eまたはf(精度により自動切り替) i 符号つき整数 n 整数へのポインタ o 符号なし8進整数 O 符号なし8進整数(long) p ポインタ s 文字列 u 符号なし10進整数 U 符号なし10進整数(long) x 符号なし16進整数 X 符号なし16進整数(long) ======================================== ------------------------------------------------------------------------ 付表3:演算子の優先順位 ------------------------------------------------------------------------ ========================================== 演算子 結合規則 ------------------------------------------ () [] -> . → ! ~ ++ -- - (type) * & sizeof ← * / & → + - → << >> → < <= > >= → == != → & → ^ → | → && → || → ?: ← = += -= *= /= &= &= ^= |= <<= >>= ← , → ========================================== -- 目次-- #include ............................................. 2 #include .............................................. 2 #include ............................................. 3 #include ............................................... 4 #include ............................................. 6 #include ............................................. 6 #include ............................................. 7 #include .............................................. 7 #include ............................................. 13 #include ............................................. 17 #include ............................................... 20 付表1:printfの書式 ............................................ 22 付表2:scanfの書式 ............................................. 23 付表3:演算子の優先順位 ........................................ 24