cgo **char 来切片字符串

Kaz*_*ita 4 go cgo

我使用 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)

如果您知道,请告诉我。

Wea*_*ter 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
}
Run Code Online (Sandbox Code Playgroud)