char * STR2CSTR(VALUE str)
Ruby のオブジェクト str から C の文字列を取り出します。 str が String でない場合は to_str によって変換を試みます。
返り値を free したり直接書き換えたりしてはいけません。
STR2CSTR は、与えられたオブジェクトが文字列でなく to_str メソッドを持つ場合、内部で to_str を呼び出して暗黙の型変換を行い、それが保持する文字列ポインタを返します。しかし、このAPIでは暗黙の型変換結果となるオブジェクトがどこからも保持されないため、注意して使用しないと結果が GC される可能性があります。
Ruby 1.7 以降では代わりに StringValuePtr を使用します。こちらは、引数の参照先が暗黙の型変換の結果に置き換わるため変換結果が GC されません。(Ruby 1.7 では、STR2CSTR() は、obsolete です)
StringValue は、引数が to_str による暗黙の型変換を期待する場合に使用します。