当调用需要指向指向字符串数组,如何在 Go 中实现这一点,同时还允许 C 函数修改字符串数组?
由于数据结构和内存分配的差异,在 Go 中创建切片并将其直接传递给 C 函数是不可能的。相反,需要在 C 中分配数组。
// Allocate an array in C cArray := C.malloc(C.size_t(c_count) * C.size_t(unsafe.Sizeof(uintptr(0)))) // Convert C array to Go array a := (*[1<<30 - 1]*C.char)(cArray) // Copy Go strings to C array for index, value := range strs { a[index] = C.CString(value) } // Call C function with pointer to array pointer err := C.f(&c_count, (***C.char)(unsafe.Pointer(&cArray)))
通过在 C 中分配数组,它允许 C 函数修改数组并调整数组大小。 C 中所做的更改将在 C 函数返回后反映在 Go 切片中。
以上是如何将 Go 切片传递给 C 函数,以修改指向字符串数组的指针?的详细内容。更多信息请关注PHP中文网其他相关文章!