さかいです。 From: rubikitch <rubikitch / ruby-lang.org> Subject: [ruby-ext:01769] 文字列を破壊的に変更する関数 Date: Mon, 18 Jun 2001 04:44:08 +0900 > Cの文字列を破壊的に変更する関数をRubyでwrapするとき、 > こんなコードはいけないのでしょうか? > README.EXT.jpでは > 「文字列の中身は参照するだけで、直接変更しないことです」 > と書いてありますが、動いてます。 > > 直接変更するというのは、 > * s = "abc"; RSTRING(s)->ptr = s; のようにポインタを変更することなのか、 > ((-これは明らかに危なっかしい気はします-)) > * RSTRING(s)->ptr[0]='X'; のようにポインタを変えないで破壊的な動作をする > ことなのか > の両方を指しているのでしょうか? 後者で書き換える前には、rb_str_modify()を呼びだして、 メモリが共有されてないこと等を保証しないと危険だと思います。 -- 酒井 政裕 / Masahiro Sakai