From: "民斗" Date: 1999-06-08T10:44:47+09:00 Subject: [ruby-dev:7087] Re: [BUG] unpack('m') 民斗です。 [Subject: [ruby-dev:7083] Re: [BUG] unpack('m')] [Date: Tue, 8 Jun 1999 10:23:22 +0900 From:WATANABE Hirofumi] > :String#unpack('m') して生成された文字列を C レベルで操作すると末尾に > :ゴミがついていることがあります。Ruby レベルでは問題ありません。 > : > :# STR2CSTR() したものって、'\0' 終端されていると仮定して良いんですよね? > 変換後の文字列の中に '\0' が含まれることもあるわけで, > '\0' で終端させてもあまり意味がないような気がします. > 特に 'm' や 'u' の場合は. > やはり長さを意識して処理したほうがいいのではないでしょうか? ん〜、ま、そりゃそうなんですけど、標準添付の kconv でも '\0' 終端を 仮定しているみたいですし…。 > それと変換後のバイト数分だけ rb_str_new してるので, > そのまま '\0' を書き込むと memory leak することもあります. > ('=' の padding がないとき) いえ、rb_str_new() は、指定されたバイト数+1 の領域を確保して、最後の バイトに '\0' を書くようになってます。 だから、文字列の終端の '\0' を期待してもいいんだろうと思ってました。 -- 民斗