さかいです。

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