我的代码是:

package main

/*
#include <stdio.h>
#include <string.h>

void fill_2d_array(char (*s)[16]) {
    strcpy(s[0], "hello");
    strcpy(s[1],"cgo");
}
*/
import "C"
import "fmt"
import "unsafe"

func main() {
        dirs := make([][]byte, 4)
        for i := 0; i < 4; i++ {
            dirs[i] = make([]byte, 16)
        }
        C.fill_2d_array(((*C.char)[16])(unsafe.Pointer(&dirs)))

        fmt.Println(dirs)
}

当我使用go run test.go运行时,它失败并说:
./test.go:21: type *C.char is not an expression

我的问题是如何将二维 slice 传递给上面的fill_2d_array这样的C函数?

谢谢。

最佳答案

解决者:C.fill_2d_array((*[16]C.char)(unsafe.Pointer(&dirs)))

07-26 03:59