namazu-dev(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: isdigit (Re: Namazu for Win32 binary snap release 20000215)



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