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

Reply via email to