cgo **字符对字符串进行切片

问题描述 投票:0回答:1

我使用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个回答
5
投票

从 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
}
© www.soinside.com 2019 - 2024. All rights reserved.