From: Motoyuki Kasahara <m-kasahr@xxxxxxxxx> さん曰く Subject: [namazu-dev 1733] Re: isdigit (Re: Namazu for Win32 binary snap release 20000215) Message-ID: <200002210457.NAA25966@xxxxxxxxxxxxxx> Date: Mon, 21 Feb 2000 13:57:18 +0900 (JST) 笠原> * From: Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> 笠原> * Date: Mon, 21 Feb 2000 12:11:11 +0900 笠原> 笠原> > だけど、考え直してみると "不明" は 8 bit 文字なので 笠原> > 笠原> > isdigit((int)str[i]) 笠原> > 笠原> > で isdigit に渡るのは負の値になります。そして、 isdigit の実 笠原> > 装によっては、負の値が渡されると動作がおかしくなる、という可 笠原> > 能性があります。 笠原> 笠原> そういう実装も世の中にはあるかも知れませんが、Win32 でそれはあ 笠原> るでしょうか。char で表せる範囲を int に拡張したのなら、多分な 笠原> いような気がするんですけど....。誤動作だとすれば、ISO 8859 の文 笠原> 字でも同じことが起きる筈です。 iso-8859 な From: を namazu に渡したこと無いので、やってみました。 しかし、mknmz するとき、(おそらく nkf で)、decode + code 変換さ れてしまいました。nkf を使わない環境をつくってみないとどうなるか わかりませんです。 笠原> まず、-255 〜 255 を順に isdigit() に与えてみて、結果をみるとい 笠原> うのは、いかがでしょう。 というわけで、やってみました。 #include <stdio.h> #include <ctype.h> main () { int c; c = -255; while(c < 256){ if(isdigit(c)) fprintf(stdout, "%d is t.\n", c); else fprintf(stdout, "%d is nil.\n", c); ++c; } } な簡単なものです。(この試験でいいですか?) SunOS 5.4(SPARC) + gcc 2.95.2 => sol.txt WinNT4.0 + cygwin 20.1b(egcs-2.91.57) => win32.txt (lf に直しています) の結果をつけておきますが、負の領域の結果が異なっています。 # なにが正解なのかは相変わらずわかっていませんけど。^^;;; ちなみに、SunOS 5.4 は、過去のしがらみから % echo $LANG japanese で、WinNT の LANG は、ja, japanese, ja_JP.SJIS で試してみました が、差はありませんでした。 -- 白井秀行 (mailto:shirai@xxxxxxxxxxxxxxxxxxx)
Attachment:
isdigit-chk.sol.txt.gz
Description: Binary data
Attachment:
isdigit-chk.win32.txt.gz
Description: Binary data