Namazu-devel-ja(旧)


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

「不明」 problem again



namazu-devel-ja へ振ります

Hideyuki SHIRAI (白井秀行) <shirai@xxxxxxxxxxxxxxxxxxx> wrote:

>白井> http://www.forest.impress.co.jp/article/2000/02/22/namazu.gif
>
>なんか症状が違うような気がしたので From: を外して試して見たら、
>sjis ベースだと上記の GIF の様になります。
(snip)
> ADDRESS : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF
>00000A70 : 0A 0A 0A 31 31 2E 20 8E C0 8C B1 20 28 83 58 83 ...11. 実験 (スコ
>00000A80 : 52 83 41 3A 20 32 29 0A 92 98 8E D2 3A 20 95 73  ア: 2).著者: 不
>                                                     ~~~~ 不
>00000A90 : 96 0A 93 FA 95 74 3A 20 57 65 64 2C 20 38 20 44 ..日付: Wed, 8 D
>           ~~~
(snip)
> ADDRESS : +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF
>00000000 : 95 73 96 BE 0A                                  不明.
>
>## うぅ、一バイト落ちている。。。

  % LANG=ja_JP.SJIS namazu foo ~/Namazu/bar

と実行しても手元の環境では問題ありません。

「一バイト落ちている」という症状からすると、field.c の
nmz_get_field_data() が呼び出している nmz_chomp が原因かもし
れません (UNIXでは問題なく動く)。この辺りを中心に調べていた
だけます?  > Windows利用者の方

  void 
  nmz_chomp(char *str)
  {
      int i;
      for (i = strlen(str) - 1; i >= 0; i--) {
	  if (*(str + i) == '\n' || *(str + i) == '\r'
	      || *(str + i) == ' ' || *(str + i) == '\t') 
          {
	      *(str + i) = '\0';
	  } else {
	      break;
	  }
      }
  }

ところで、上のコードでは *(str + i) と書いていますが、 
str[i] の方が自然ですよね? 大昔に聞いた「ポインタで宣言した
ならポインタらしく扱いなさい」という話 (出典は不明) の悪影響
だと思います。一般的にはどうなのだろう。

あるいは、次のように書き直した方がわかりやすいでしょうか。

  void 
  nmz_chomp(char *str)
  {
      char *p = str + strlen(str) - 1;

      for (; p >= str; p--) {
	  if (*p == '\n' || *p == '\r' || *p == ' ' || *p == '\t') {
	      *p = '\0';
	  } else {
	      break;
	  }
      }
  }

-- Satoru Takabayashi