登录
首页 >  Golang >  Go问答

将字符数组转换为常量指针

来源:stackoverflow

时间:2024-02-19 19:42:24 304浏览 收藏

今天golang学习网给大家带来了《将字符数组转换为常量指针》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我正在使用 cgo,这是 c 函数:

int init(int argc,char * const argv[]){
 //some code
}

我应该将命令参数从 go 发送到 c,这是 golang 代码:

func main(){
    args := os.Args
    arg_C := convertCSliceToCharArray(args)
    C.init(C.int(len(args)),argC)
}


func convertCSliceToCharArray(slice []string)[]*C.char {
    slice_C := make([]*C.char,len(slice))
    for i,s := range slice{
        char_c := C.CString(s)
        defer C.free(unsafe.Pointer(&char_c))
        slice_C[i] = char_c
    }
    return slice_C

}

运行 go build,我收到此错误 cannot use _cgol([]*_ctyre_char 类型的变量) 作为 _cfunc_init 参数中的 **_ctype_char 类型。

那么在cgo中,char * const[]的类型是**_ctype_char,如何将[]string转换为它?


正确答案


所以这个问题的正确答案是:

func main(){
    args := os.Args
    arg_C := convertCSliceToCharArray(args)
    //use the first element's pointers of the array
    C.init(C.int(len(args)),&arg_C[0])
}


func convertCSliceToCharArray(slice []string)[]*C.char {
    slice_C := make([]*C.char,len(slice))
    for i,s := range slice{
        char_c := C.CString(s)
        defer C.free(unsafe.Pointer(&char_c))
        slice_C[i] = char_c
    }
    return slice_C

}

在 c 中,作为函数参数的 char *argv[] 与 char *argv 相同——即指向 char 数组第一个元素的指针。

感谢保罗·汉金

终于介绍完啦!小伙伴们,这篇关于《将字符数组转换为常量指针》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>