如何通过CGO在golang中将Go字符串复制到C char *?

15

我想通过CGO将Go字符串复制到char *中。

我可以像这样做吗?

func copy_string(cstr *C.char) {

    str := "foo"
    C.GoString(cstr) = str

}
2个回答

24
根据cgo文档,您需要使用C.CString函数将Go字符串转换为C字符串:
cstr = C.CString(str)

请注意,C.CString函数会为您分配内存,但不会释放它,因此您需要使用类似以下的调用来释放内存:

C.free(unsafe.Pointer(cstr))

12
使用defer C.free(unsafe.Pointer(cstr)),Go语言会在函数返回时调用它,以使其更好。 - Bear0x3f

3

使用cstr = C.CString(str)对我没有效果,因此我选择了直接在CGO库上看到的东西:C.strcpy((*C.char)(cstr), (*C.char)(C.CString(str)))


它哪里出了问题? - kbolino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接