我有一个 Zig 字节切片,即[]u8
,并且 C 依赖项需要 avoid**
作为参数。我如何将前者转换为后者?
问问题
101 次
2 回答
0
用指针 extern 你的函数参数
抄送
void gg(void **a) {
printf("%s\n", a);
}
主要的.zig
extern fn gg(a: [*:0]const u8) void;
pub fn main() void {
gg("hello");
}
$ zig run c.c main.zig -lc
hello
于 2021-11-21T18:10:05.640 回答
0
void**
是一个指向任意透明的指针,相当于[*][*]anyopaque
in zig。在 c 中,这可能指的是任意指针数组?或者只是一个奇怪的类型字节数组。
// assuming it just wants a pointer to a byte array
const slice: []const u8 = "123456";
c_function(@ptrCast(**anyopaque, slice.ptr));
// an array of anyopaque pointers
const slice = "123456";
const items: [*]*anyopaque = &[_]*anyopaque{@ptrCast(*anyopaque, slice.ptr)};
// *anyopaque to []u8
@ptrCast([*]u8, @alignCast(@alignOf(u8), c_pointer))[0..c_length]
于 2022-02-14T20:17:21.640 回答