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'는 Ruby 문자열 일 수있는 'VALUE'을 반환합니다. 'some_method'의 서명은 루비 문자열 (즉, VALUE) 또는 C 문자열 (예 :'char *')을 기대합니까? – matt

+0

c 문자열을 기다리고 있습니다 – mandss

답변

0

char*에 루비 문자열을 변환 할 StringValueCStr macro를 사용합니다 (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