[Mew-dist 14789] Re: bin.tar.gz
NARA Susumu
nara at example.com
2000年 10月 28日 (土) 10:59:59 JST
Kazu Yamamoto (山本和彦) <kazu at example.com>wrote in message
mail:<20001026.083218.08230439.kazu at example.com>...
> > これは isdigit() の引数は int を仮定しているのに char を渡しているた
> > めで、自動的に cast されるので今のままで問題はありませんが、一応、報
> > 告しておきます。
>
> C に詳しい人にお聞きしたいのですが、これって ANSI の仕様ですか?
isdigit(c);
規格では、c は unsigned char で表現できる値か、EOF でなければならない
とあります。
実装自体はマクロになっていて、翻訳表のインデックスに使われるので、c に
規格以外の値を渡した時に、翻訳表外の記憶域にアクセスしてしまう事が問題
となります。
Atsushi Onoe <onoe at example.com>wrote in message
mail:<200010260131.e9Q1Vqw02482 at example.com>...
> 実際、isdigit() に MSB の立った signed char (つまり EOF 以外の負の値)を
> 渡してはいけません。portable なプログラムでは
> char *p;
> if (isdigit((unsigned char)*p))
onoe さんが書かれているように、unsigned char でキャストしてあげるのが
安全かと思います。
--nara
Mew-dist メーリングリストの案内