2014-12-09 2 views
0
if (RARRAY_LEN(arr) > 0) 
    { 
    VALUE str = rb_ary_entry(arr, 0); 
    abc = some_method(*str); 
    } 

rb_ary_entry(arr, 0) дает мне значение индекса. Затем я хочу преобразовать это значение в строку, чтобы передать его следующему методу. Я пробовал:Прочитать элемент массива и преобразовать в строку

rb_str_new2(rb_ary_entry(arr, 0)); 

, но я получаю сообщение об ошибке сказав:

error: indirection requires pointer operand `('VALUE' (aka 'unsigned long')` `invalid`)` 
`ipDict = some_method(*str)`; 
+0

'rb_ary_enrty' возвращает значение VALUE, которое может быть строкой Ruby. Что такое подпись 'some_method', ожидает ли она строки Ruby (т. Е. VALUE) или строки C (т. Е.' Char * ')? – matt

+0

Ожидается c Строка – mandss

ответ

0

Используйте StringValueCStr macro преобразовать Рубиновый строку в char*rb_str_new функций для преобразования в другом направлении).

VALUE str = rb_ary_entry(arr, 0); // str is now a Ruby String 
char *c_str = StringValueCStr(str); 

abc = some_method(c_str); 
+0

Спасибо, что работает. – mandss

Смежные вопросы