[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 メーリングリストの案内