转到 [] 字符串到 C 字符**

Posted

技术标签:

【中文标题】转到 [] 字符串到 C 字符**【英文标题】:Go []string to C char** 【发布时间】:2014-02-05 03:27:30 【问题描述】:

我开始尝试将一些 C 库集成到我使用 cgo 的项目的 Go 代码中,但遇到了一个问题。

在其中一个 C 函数中,我需要将 argv 传递给函数调用。在 C 中,argv 是一个指向 char 字符串数组的指针(K&R C,§5.10),我需要将字符串切片转换为 char**。

关于如何进行从 Go 到 C 的变量类型转换的任何信息,我已经很好地了解了高低,但似乎几乎没有文档。任何帮助将不胜感激。

【问题讨论】:

你见过this吗? 嗨,我没看到,谢谢。读完之后,我对类型转换有了更多的了解。但是,它似乎确实可以进行一些修改,即当您不需要 argv 时手动调用 C.freeCharArray,而不是推迟它。 【参考方案1】:

您需要自己创建数组。应该这样做:

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])

【讨论】:

感谢您的回答。我已经将它包装在一个函数中,它似乎有一些问题。第一行产生一个错误gm.go:73:25: expected operand, found ']',当删除它时,我们会遇到更多问题,因为您无法制作 _Ctype_char 并且您似乎无法引用 _Ctype_char 的索引 抱歉,我今天埋头在一些 C++ 中,并且在语法上打错了字——编辑应该会修复它。如果你想把它放在一个辅助函数中,你可能需要稍微调整一下代码:如果defer调用在你进行C调用之前触发,你将传递释放的内存。 没关系,我继续在 Go 中使用 php 函数名!这似乎已经解决了它,我把它变成了一个辅助函数,主函数用延迟清理东西。

以上是关于转到 [] 字符串到 C 字符**的主要内容,如果未能解决你的问题,请参考以下文章

C语言中字符串和整数小数相互转换的函数以及头文件

变量声明后转到字符串

golang [用转到快速产生一个随机字符串]

舍入浮点数,然后转到语言环境字符串

从 Firebase 列表 Observables 数组转到字符串数组

转到字符串。替换(输入,“ n”,“”,-1)未识别]]