使用 CGO 将 Go 字符串复制到 C 字符指针
在 Go 中使用 CGO 时,常见的要求是将 Go 字符串复制到C 字符指针。虽然将 Go 字符串分配给 C 指针似乎很简单,但正确的方法涉及使用 C.CString 函数。
不正确的复制尝试
代码:
func copy_string(cstr *C.char) { str := "foo" C.GoString(cstr) = str }
不正确,因为 GoString 旨在将 C 字符指针转换为 Go 字符串,而不是相反
正确的复制方法
根据CGO文档,应该使用C.CString将Go字符串转换为C字符串:
cstr = C.CString(str)
内存管理
请注意C.CString 为C 字符串分配内存但不释放它。当您完成 C 字符串后,您有责任通过调用
C.free(unsafe.Pointer(cstr))
来释放此内存。
以上是如何使用 CGO 安全地将 Go 字符串复制到 C 字符指针?的详细内容。更多信息请关注PHP中文网其他相关文章!