C言語

strcoll

strcollは、ロケールのLC_COLLATEに従って文字列の順序を判定(そのロケールの辞書順)する。Man page of STRCOLL strcoll - cppreference.comロケールによっては、アルファベット順ではない場合があるらしい。 strcoll.cで、チェコ語では、"ch"よりも"h"が前…

strtol

strtolは、文字列を指定された基数で変換(n進数の文字列だと解釈)する。Man page of STRTOL strtol, strtoll - cppreference.comstrtol.cで、与えられた文字列を0, 2, 8, 10, 16を基数として変換。 $ vi strtol.c $ gcc strtol.c -o strtol $ ./strtol str: …

atof

atofは、実数の文字列を倍精度浮動小数点数値型に変換する。Man page of ATOFatof.cで、入力文字列がどうなるか試してみる。 $ vi atof.c $ gcc atof.c -o atof $ ./atof str: 1 d = 1.000000 $ ./atof str: 1.23 d = 1.230000 $ ./atof str: -4.56 d = -4.5…

ispunct

ispunctは、句読点文字かどうかをチェックする。ispunct(3) manページ句読点文字というのは区切り文字の事だが、実態としては英数字を除いた表示可能文字、つまり記号であり、スペースは含まれない。いろいろな文字で試してみる。 $ vi ispunct.c $ gcc ispu…

isprint

isprintは、スペースを含む表示文字かどうかをチェックする。isgraph(3): char classification routines - Linux man pageこれで、a、b、c、1、スペース、タブ、改行、Ctrl+A、をチェックする。 $ vi isprint.c $ gcc isprint.c -o isprint $ ./isprint a 61…

isgraph

isgraphは、スペースを除く表示文字かどうかをチェックする。isgraph(3): char classification routines - Linux man page C言語関数辞典 - isgraphこれで、a、b、c、1、スペース、タブ、改行、Ctrl+A、をチェックする。 $ vi isgraph.c $ gcc isgraph.c -o …

iscntrl

iscntrlは、制御文字かどうかを判定する。iscntrl(3): char classification routines - Linux man page C言語関数辞典 - iscntrl iscntrl - cppreference.com 制御コード表getcharで取得した入力文字を判定する。 $ vi iscntrl.c $ gcc iscntrl.c -o iscntrl…

isspace

isspaceは、その文字が標準空白類文字かどうかを判定する。isspace(3): char classification routines - Linux man page C言語関数辞典 - isspaceこの標準空白類文字ってのがややこしくて、スペース、タブ、改行、それ以外にもいろいろあるけど、その中で復…

putc

putcは、fputcと同じく、指定されたストリームに、指定された1文字を書き込む。 ただし、putcはマクロ定義されている処理系もある。 そのため、複数回評価されることによる副作用を伴う式は、渡すべきではないとのこと。fputc, putc - cppreference.com今回…

fputc

fputcは、指定されたストリームに、指定された1文字を書き込む。C言語関数辞典 - fputc fputc, putc - cppreference.comファイルと標準出力に出してみる。として、実行すると、 $ vi fputc.c $ gcc fputc.c -o fputc $ ls fputc fputc.c $ ./fputc ABCDE$ ls…

setvbuf

setvbufで、setbufより入出力バッファの詳細について設定できる。C言語関数辞典 - setvbuf setvbuf - cppreference.com setvbuf | Programming Place Plus C言語編 標準ライブラリのリファレンス /* ヘッダファイルのインクルード */ #include <stdio.h> /* 標準入出</stdio.h>…

freopen

freopenは、指定のストリームをいったん閉じて、新しいストリームを開いて、指定のファイルと紐づける。C言語関数辞典 - freopen freopen, freopen_s - cppreference.com コンピューター:C言語講座:freopenについて ファイル処理 | C++ プログラミング解説…

volatile

volatileを付けるとlongjmpでも、最適化抑止されて、値が戻ることは無くなる。[法大奥山研究室]C言語:17.2. volatilexはこれまでの普通のint型に対し、yはvolatileのint型。 $ vi volatile.c $ gcc -O volatile.c -o volatile $ ./volatile x = 20 y = 20…

longjmp

longjmpで、保存した実行コンテキストの場所に飛び戻ることが出来る。[法大奥山研究室]C言語:17.2. volatile問題は、setjmpしてからlongjmpするまでに変更された変数の値である。 volatileを付けていない場合は、longjmp後でも、setjmpが呼び出される前の…

setjmp

setjmpで、その呼び出した時の実行コンテキスト(実行情報)を保存できる。C言語関数辞典 - setjmp いにしえのsetjmp()とlongjmp()、あるいはCの例外とは - Qiita setjmp | Programming Place Plus C言語編 標準ライブラリのリファレンスこれを呼んで実行コン…

ラベル

goto文をほとんど使わないので、goto文の飛び先のラベルについて、気になることを試してみた。goto•¶ /* ヘッダファイルのインクルード */ #include <stdio.h> /* 標準入出力 */ /* main関数 */ int main(void){ /* 変数の宣言 */ int i; /* ループ変数i */ int j; /*</stdio.h>…

goto文

gotoを使うと、指定したラベルの位置まで飛ぶことが出来る。goto•¶ C言語 - ラベルBASICの名残であり、現代では使ってはいけないとはよく言われる。 /* ヘッダファイルのインクルード */ #include <stdio.h> /* 標準入出力 */ /* main関数 */ int main(void){ /* 変数</stdio.h>…

setlocale

setlocaleでロケールを取得したり、設定できる。Man page of SETLOCALE C言語辞典 setlocale() C言語辞典 localeconv()これ1つで設定と取得ができるが、使い方がわかりにくく、理解してなかった部分もあったので改めて。実行すると、デフォルトのロケール…

localeconv

localeconvでロケール情報を取得できる。Man page of LOCALECONV C言語関数辞典 - localeconvデフォルトのロケール("C"かな?)情報で、小数点の記号や、整数部のセパレータ(何桁かごとに区切る記号)がどうなるか調べる。実行すると、 $ vi localeconv.c $ gcc…

stderr

stdinが標準入力のファイルポインタ、stdoutが標準出力のファイルポインタを表すように、stderrは標準エラー出力のファイルポインタを表す。Man page of STDINperrorは標準エラー出力に出力する。 そして、stderrを指定すれば、fprintfでも標準エラー出力に…

strerror

strerrorを使えとのことなので、strerrorの引数にerrnoを渡してみる。Man page of STRERRORstrerror(errno)でも、 $ vi strerror.c $ gcc strerror.c -o strerror $ ./strerror errno = 0 errno = 2 strerror(errno) = No such file or directory fopen erro…

sys_errlist

sys_errlistというグローバル配列にエラーメッセージが格納されている。 これに添字でerrnoを指定すると、そのerrnoのエラーメッセージを取得できる。sys_errlist(3) manページsys_errlist[errno]の中身は、 $ vi sys_errlist.c $ gcc sys_errlist.c -o sys_…

errno

何らかのエラーが発生した時、グローバル変数errnoにどんなエラーが発生したかエラー番号が格納される。Man page of ERRNOエラー発生前と、エラー発生後に、errnoを出力。 存在しないtest.txtを開いて、どうなるか見てみる。 $ vi errno.c $ gcc errno.c -o …

リダイレクト(入力)

ファイルの中身を標準入力として受け取ることもできる。https://www.kushiro-ct.ac.jp/yanagawa/C-2015/26-0722/index.html もう一度基礎からC言語 第9回 制御構造と変数(5)~forとwhileに関するあれこれ 入出力の切り替え~リダイレクトとパイプdest.cは、…

リダイレクト(出力)

プログラムの結果の出力先を変えることをリダイレクトという。https://www.kushiro-ct.ac.jp/yanagawa/C-2015/26-0722/index.html もう一度基礎からC言語 第9回 制御構造と変数(5)~forとwhileに関するあれこれ 入出力の切り替え~リダイレクトとパイプsrc.…

パイプライン

コマンドとコマンドの間にパイプ('|')を入れることで、最初のコマンドから、次のコマンドに結果を渡すことができる。 pipeシステムコールはこのパイプを扱うものだが、pipeでなくてもコマンドを受け取ることはできる。 コマンドを受け渡していくパイプのつな…

FILE

改めて、FILE型(FILE構造体)について調べていく。Man page of FOPEN Bioinformaticsのお勉強: ファイル記述子、ファイル型、ファイルポインタ、stdin、stdout、stderrについての考察stdio.h/usr/includeに移動してstdio.hを開く。FILEで検索"FILE"で検索。bi…

エスケープシーケンス

プログラム中に改行やタブを挿入するときなどに使うエスケープシーケンス。エスケープシーケンス - Wikipediaこれによると、実はエスケープシーケンスは3種類あって、 改行などのエスケープコード(エスケープ文字) 文字集合の指示・呼び出しのシーケンス(特…

ferror

ferrorは、指定されたファイルポインタ(ストリーム)でエラーが発生しているかどうかを判定する。Man page of FERROR C言語関数辞典 - ferror読み取り専用でファイルを開いた時に、書き込みをしようとしたらどうなるか。feofのトピックで"test.txt"を読み取り…

feof

feofは、指定されたファイルポインタ(ストリーム)がEOFかどうかを判定する。Man page of FERROR C言語関数辞典 - feoffgetcの場合はEOFを返すので戻り値で判定できるが、fgetsやfreadなど他の関数の場合は読み込めなかった理由を戻り値だけで判定できない。 …