From: NISHIKAWA Date: 2003-03-13T02:46:00+09:00 Subject: [ruby-dev:19817] Re: RSTRING(str)->ptr こんばんは。nyasu@3web です。 主張点の不明確なメールをまき散らしている気がしますが... Thu, 13 Mar 2003 00:50:21 +0900 nobu.nakada@nifty.ne.jp wrote > StringValuePtr()はptrを必ず非NULLにしてしまうのが問題になるケー > スもあるかも知れません。 ヌルストリングがRuby側に無いので、それはそれでいいのかも、と思っています。 Thu, 13 Mar 2003 01:11:48 +0900 たむらけんいち wrote > #define RB_STRING_VALUE(s) (TYPE(s) == T_STRING ? (s) : (*(volatile VALUE *)&(s) = rb_str_to_str(s))) と > #define StringValue(s) RB_STRING_VALUE(s) VisualuRuby計画(仮称)では、文字列が\0を含むことが多いのでSTR2CSTR()より こちらのほうが良さそうです。warningが出なくて。 このwarningは、\0を含む時点でCSTRではない、という主張なのでしょうか。 (文字列とは、(NULL)、asciz、\0入り、の2+1種?) Rubyのwarningとして見せる意味がよく分かりませんが、 拡張ライブラリのデバッグ用? 今のところの私の理解は、 ・RSTRING()は、確実にT_Stringが拾える時(型チェックを行った後)にのみ利用 ってことで、それ以外の用途では ・StringValue()(必要に応じて型変換とチェックが行われ結果の型は必ずT_String) を使う、ということですが、これでOKでしょうか。 __ ☆ nyasu@3Web ★ PGP指紋 : 24 DC 99 F5 3E 4A C2 07 AA 21 B4 0F 96 60 34 1D ※ PGP公開鍵: http://pgp.nic.ad.jp:11371/pks/lookup?op=get&search=0x90E91DC5