go - cgo **char slice 字符串

标签 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])) 返回 0 }

错误是

无效操作:argv[0](类型**C.char不支持索引)

如果你知道请告诉我。

最佳答案

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

关于go - cgo **char slice 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36188649/

相关文章:

postgresql - 如何使用 golang sql 在 postgres 中选择整个表?

go - 在Golang中附加文件并通过SMTP发送时没有正文的电子邮件

pointers - 您可以将多个值中的部分或全部作为函数的指针返回吗?

c - 在 C 语言中使用 Go slice

go - 将参数解析为 bool 或仅在 switch 语句中使用字符串

Go 的缺点

go - 如何将 [1024]C.char 转换为 [1024]byte

在 CGO 中使用 C 结构的 golang 结构

go - 包含文件中的 CGO undefined reference

c - 是否可以编写 C 函数来修改 Go 代码中定义的类型的结构?