Seaside Laboratory

Post

isprint でハマる

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

int isprint( int c ); 

使っているコンパイラは char で宣言すると signed になるので、関数側で判定がうまくいかない模様。

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

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