【发布时间】:2020-09-12 15:52:45
【问题描述】:
我可以转换从 Go 中的 C (cgo) 函数返回的字符串数组 (char**) 吗?
下面的代码编译并运行,但我无法通过字符串列表进行范围。
而且我什至不确定它是否违反了“传递指针”的规则:https://golang.org/cmd/cgo/
任何想法都会有所帮助,自从我用 C 编码以来已经有好几年了!提前致谢!
package main
/*
#include "stdlib.h"
char** getlist ()
{
char **array = NULL;
array = (char**)realloc(array, 2*sizeof(*array));
array[0]="HELLO";
array[1]="WORLD";
return array;
}
*/
import "C"
import (
"log"
"unsafe"
)
func main() {
list := C.getlist();
log.Printf("\n========\n C.getList()=%s", list)
ulist := unsafe.Pointer(list)
log.Printf("\n========\nulist=%s", ulist)
}
【问题讨论】:
-
参见 cgo 上的 wiki 页面,例如:github.com/golang/go/wiki/cgo#turning-c-arrays-into-go-slices
-
感谢您的评论,但 wiki 页面的示例是针对一维数组的。我将如何为二维数组编写转换代码?我返回的是 C.char** 而不是 C.char*。
-
外部数组仍然是“1D”,内部类型没有改变任何东西。我举个例子