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