我开始尝试使用cgo将一些C库集成到我的Go项目中,并遇到了一个问题。在C函数中,我需要将argv传递给一个函数调用。在C中,argv是指向char字符串数组的指针(K&R C, §5.10),我需要将其从字符串切片转换为char**。
我已经仔细查找了有关如何从Go转换为C的变量类型转换的任何信息,但似乎几乎没有文档。任何帮助都将不胜感激。
我已经仔细查找了有关如何从Go转换为C的变量类型转换的任何信息,但似乎几乎没有文档。任何帮助都将不胜感激。
您需要自己创建数组。可以像这样创建:
argv := make([]*C.char, len(args))
for i, s := range args {
cs := C.CString(s)
defer C.free(unsafe.Pointer(cs))
argv[i] = cs
}
C.foo(&argv[0])
defer
调用在您进行C调用之前触发,那么您将会传递已释放的内存。 - James Henstridge
C.freeCharArray
,而不是推迟它。 - onmylemon