On 7 aoû¹, 17:12, "Tim Pease" <tim.pe... / gmail.com> wrote: > On 8/7/07, unbewust <yvon.thora... / gmail.com> wrote: > > > > > from ruby.h : > > > struct RArray { > > struct RBasic basic; > > long len; > > union { > > long capa; > > VALUE shared; > > } aux; > > VALUE *ptr; > > }; > > > my module make use of : > > VALUE m_set_icon(VALUE self, VALUE src_path, VALUE dst_pathes[]) > > VALUE m_set_icon(VALUE self, VALUE src_path, VALUE dst_pathes) > > > dst_pathes is a T_ARRAY > > > int len = RARRAY(dst_pathes)->len; > > printf("len = %d\n", len); > > char *cdst_pathes[len]; > > > how to duplicated the VALUE (shared) from the struct RArray into > > cdst_pathes (an Array of char *) ??? > > int len = RARRAY(dst_pathes)->len; > char* cdst_pathes[len]; > > long ii; > for (ii = 0; ii < len; ii++) { > VALUE str = rb_ary_entry( dst_pathes, ii ); > cdst_pathes[ii] = StringValueCStr( str ); > > } > > rb_ary_entry will return the VALUE from the Array at the given index. > > StringValueCStr will check that the given VALUE is a String, and then > it will return the pointer of that String. This will not give you > copy, so the memory is still owned by the Ruby interpreter, and it > will be garbage collected if the original String object goes out of > scope. You might need to use memcopy to get a copy of the string that > will not be garbage collected -- just depends on how long you're going > to need a reference to the data. > > Take a look at the Ruby source code for more methods for working with > Arrays and Strings. ruby.h and intern.h > > rb_ary_ <-- methods that operate on Array objects > rb_string_ <-- methods that operate on String objects > > Blessings, > TwP OK fine thanks, I've found it myself ;-)