歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Golang cgo編程 [] string 轉 C語言 char**

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行。

Copyright © Linux教程網 All Rights Reserved