В источнике ruby.h
для Ruby 1.8.7-p357 он имеет:
/* obsolete API - use StringValue() */
char *rb_str2cstr _((VALUE,long*));
StringValue
возвращает VALUE
, который можно использовать RSTRING
чтобы получить длину и указатель char *
:
RSTRING(s)->len /* length */
RSTRING(s)->ptr /* char pointer */
Так что, если существующий код выглядит примерно так:
VALUE str = ...; /* The ruby String */
long len;
char* words;
words = rb_str2cstr(str, &len);
Затем измените его на:
VALUE str = ...;
str = StringValue(str);
char* words = RSTRING(str)->ptr;
long len = RSTRING(str)->len;
Если вы уверены, что str
уже является строкой Ruby, вы можете пропустить вызов StringValue
, но было бы безопаснее его сохранить.