为了账号安全,请及时绑定邮箱和手机立即绑定

cgo **char 切片字符串

cgo **char 切片字符串

Go
繁星淼淼 2021-12-27 15:55:59
我已经使用 cgo 开发了一个 pam 模块。不能转换为 []string a ** charfunc pam_sm_authenticate(pamh *C.pam_handle_t, flags C.int, argc C.int, argv **C.char) int {        fmt.Println(C.GoString(*argv[0]))        return 0}错误是invalid operation: argv[0] (type **C.char does not support indexing)如果你知道,请告诉我。
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

从 cgo wiki 拼凑而成:https : //github.com/golang/go/wiki/cgo#Turning_C_arrays_into_Go_slices。


import "C"

import "unsafe"


func GoStrings(argc C.int, argv **C.char) []string {


    length := int(argc)

    tmpslice := (*[1 << 30]*C.char)(unsafe.Pointer(argv))[:length:length]

    gostrings := make([]string, length)

    for i, s := range tmpslice {

        gostrings[i] = C.GoString(s)

    }

    return gostrings

}


查看完整回答
反对 回复 2021-12-27
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信