C言語関係掲示板

過去ログ

No.1088 isspace関数で半角カナを偽にしたい

[戻る] [ホームページ]
No.14287

isspace関数について
投稿者---いなほ(2004/05/28 00:33:04)


isspaceを使用したいのですが、カナ入力をしているにもかかわらず
空白文字とみなしてしまいます。
英字は大丈夫なのですがカナ入力はできないということ
なのでしょうか?


No.14288

Re:isspace関数について
投稿者---RAPT(2004/05/28 00:58:56)


isspaceは1バイト文字の判定に使う関数です。
マルチバイト文字を判定するには専用の関数を使用する必要があります。

>空白文字とみなしてしまいます。
>英字は大丈夫なのですがカナ入力はできないということ
>なのでしょうか?
たまたま、そのカナ文字の第一バイトがisspace()で真となる値だったのでしょう。


No.14291

Re:isspace関数について
投稿者---かずま(2004/05/28 12:56:45)


> isspaceを使用したいのですが、カナ入力をしているにもかかわらず
> 空白文字とみなしてしまいます。
> 英字は大丈夫なのですがカナ入力はできないということ
> なのでしょうか?

こういう質問をするときは、実際の現象を具体的に提示することが重要です。

どんな環境(コンパイラやOS)で、どんなプログラムを書いて、どんな入力を
与えて、どんな出力が得られたかなどです。この場合は、文字コードも重要な
要素です。

さて、isspace はシングルバイト文字用の関数ですから、この場合も
シフトJIS のシングルバイトのカナ(俗にいう半角カタカナ)だとします。

isspace の引数は int ですが、その値は unsigned char または EOF の
値でなければなりません。たいていの処理系では、-1〜255 です。

ところが、isspace(c) で c が char の場合、c の値は -128〜127 である
処理系が多いようです。

'ア' のコード 0xb1 すなわち 177 が char だと、-79 になります。

このため isspace は正しい結果を返すことができなくなります。


No.14295

Re:isspace関数について
投稿者---かずま(2004/05/28 22:11:10)


> このため isspace は正しい結果を返すことができなくなります。
この問題を解決するためには、

    isspace((unsigned char)c)  または
    isspace(c & 0xFF)    などと書けばよいでしょう。

これで、-128〜-1 は 128〜255 (0x80〜0xFF) に変換され、isspace は
正しい結果を返すはずです。

最初の質問の説明が不十分なので、的をはずしているかもしれません。
この回答で本当に問題は解決しますか?




No.14343

レスありがとうございます
投稿者---いなほ(2004/05/31 23:41:12)


charだと戻り値がマイナス値になっていましたが、
unsigned charにすると思うように動くようになりました。
ありがとうございました。