且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何将Go字符串数组转换为C字符串数组?

更新时间:2023-02-10 14:13:42

您将返回Go切片,该切片在Go中分配,并且其结构与C数组不同.您需要在C中分配一个数组:

You're returning a Go slice which is allocated in Go, and is a different structure than a C array. You need to allocate an array in C:

//export Split
func Split(original *C.char, split *C.char) **C.char {
    goResult := strings.Split(C.GoString(original), C.GoString(split))
    cArray := C.malloc(C.size_t(len(goResult)) * C.size_t(unsafe.Sizeof(uintptr(0))))

    // convert the C array to a Go Array so we can index it
    a := (*[1<<30 - 1]*C.char)(cArray)

    for idx, substring := range goResult {
        a[idx] = C.CString(substring)
    }

    return (**C.char)(cArray)
}