http://qs1969.pair.com?node_id=1180125


in reply to Re: Is this a sane/safe way to pass an aref into a C function? (XS<Perl)
in thread Is this a sane/safe way to pass an aref into a C function?

Thanks tye, that's great!

I was trying similar things, but did not realize pack was required. This is far easier and less error-prone as you said (as well it saves me from having to wrap one C function with another as this way, I can pass the data directly to the original function), but I am thankful that I was able to learn how to pass in perl variables into a C function, even though I'm going to revert to using this method instead:

use warnings; use strict; use feature 'say'; use Inline 'C'; my @b = (1..3, 253..255); my $x = pack "V0C*", @b; check($x, length($x)); __END__ __C__ #include <stdio.h> #include <stdint.h> void check(unsigned char* n, int len){ int i; for(i=0; i<len; i++){ printf("%d\n", n[i]); } }

Output:

1 2 3 253 254 255

Of course, in the real code, I perform error checking.