Golang cgo編程 [] string 轉 C語言 char**
func Test(args[] string){
arg := make([](*_Ctype_char), 0) //C語言char*指針創建切片
l := len(args)
for i,_ := range args{
char := C.CString(args[i])
defer C.free(unsafe.Pointer(char)) //釋放內存
strptr := (*_Ctype_char)(unsafe.Pointer(char))
arg = append(arg, strptr) //將char*指針加入到arg切片
}
C.test(C.int(l), (**_Ctype_char)(unsafe.Pointer(&arg[0]))) //即c語言的main(int argc,char**argv)
}
上段代碼為go語言傳進os.args的參數行命令(string切片),通過cgo來調用,傳給C語言層的main(int argc,char**argv) 這裡,已重命名C代碼的main()函數為test(),主進程由go來啟動golang運用cgo調用C代碼,golang的 [ ]string 轉C語言的 char**,步驟為上述代碼的2-9行。