【问题标题】:cgo **char to slice stringcgo **char 对字符串进行切片
【发布时间】:2017-08-17 14:29:44
【问题描述】:

我使用 cgo 开发了一个 pam 模块。 无法转换为 []string a ** char

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

如果你知道,请告诉我。

【问题讨论】:

    标签: go cgo


    【解决方案1】:

    从 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
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 2023-02-24
      • 2014-07-08
      • 1970-01-01
      • 2021-03-12
      • 2019-01-24
      • 2017-09-28
      • 2012-11-20
      • 2011-12-03
      相关资源
      最近更新 更多