Skip to content
tsahara-iij edited this page Oct 29, 2012 · 2 revisions

mrb_str_new2() と mrb_str_new_cstr() の違い

  • 引数はどちらも同じ (mrb_state *mrb, const char *p) でやることもほぼ同じ
  • ただし mrb_str_new2() は p == NULL の時に ArgumentError 例外を上げる。 mrb_str_new_cstr() は何も考えずに NULL にアクセスする(たぶん SIGSEGV 発生)。

Ruby 文字列(String) から C 文字列の作り方

  • mrb_str_to_cstr(mrb, str) を呼ぶ。
  • 返り値の char *ptr は C 言語的な NUL 終端文字列になっている。
  • 引数の str が NUL を含む String だった場合、mrb_str_to_cstr は例外を上げる。
  • ptr はヒープに確保されている。GC で回収されるため GC が走る前に必要に応じて退避すること。
Clone this wiki locally