首页 > 后端开发 > Golang > 如何将 Go 切片传递给 C 函数,以修改指向字符串数组的指针?

如何将 Go 切片传递给 C 函数,以修改指向字符串数组的指针?

Mary-Kate Olsen
发布: 2024-12-07 15:05:13
原创
495 人浏览过

How to Pass a Go Slice to a C Function that Modifies a Pointer to a Pointer to an Array of Strings?

将切片指针传递给 Go 中的 C 函数

问题

当调用需要指向指向字符串数组,如何在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板