Hi, El mar., 31 dic. 2019 a las 5:54, Todd Chester via perl6-users (< perl6-us...@perl.org>) escribió:
> Hi All, > > https://docs.raku.org/language/nativecall.html#Passing_and_returning_values > > Did anyone else discover the mistake, hopefully not the hard way like I > did. Anyone get weird gibberish printed out like I did? > > my $string = "FOO"; > # The lifetime of this variable must be equal to the required lifetime of > # the data passed to the C function. > my $array = CArray[uint8].new($string.encode.list);v > > The mistake is that "C" strings are terminated by a chr(0) -- in > "C" terms chr(0) is called a nul or 0x00. > > If you don't terminate your C string, the reading functions keep careening > until it finds a chr(0). You have to tack a chr(0) onto the end. > > my $array = CArray[uint8].new($string.encode.list); > $array [$array.elems] = 0; > > $array should be 70 79 70 0 not 70 79 79 > You can test this with `say "$array"` (include the quotes). > > Maybe JJ will pick up on this and get it fixed. > I don't always read this list, but I do read issues. If you put it there, it will be definitely get addressed when possible. -- JJ