Seaside Laboratory

Posts

isprint でハマる

画面に表示できない文字を判別する際に isprint を使って振り分けをしていたところ、どうも意図したとおりに動作しない。よく調べてみると、int 型の引数に char 型の文字を渡していることに気づいた。

int isprint( int c );

今使っているコンパイラは単なる char を signed char として扱うので、関数側で判定がうまくいってなかった模様。

ファイル読み込み時は int を返す fgetc を使っていたので特に意識していなかったが、よくよく考えてみれば当たり前の動作か。VC++ と BCC で挙動が違ったので、てっきりポインタまわりのバグかと思った。

is 系関数の挙動については「ctype について」に詳しく載っているので気になる人はどうぞ。