使用 CGO 将 Go 字符串复制到 C char* 指针
在 Go 领域,你可能会遇到需要无缝交换的情况Go 代码和 C 库或应用程序之间的数据。其中一种场景是使用 CGO 的功能将 Go 字符串传输为 C 字符指针 (char *)。
挑战:
产生复制 Go 的愿望通过 CGO 的神奇功能将字符串转换为 char * 。问题依然存在:可以使用以下方法来实现吗?
func copy_string(cstr *C.char) { str := "foo" C.GoString(cstr) = str }
解决方案:
虽然意图是崇高的,但代码片段中呈现的方法却失败了短的。根据 CGO 官方文档,将 Go 字符串转换为 C 字符串的正确方法涉及利用 C.CString 函数:
cstr = C.CString(str)
重要的是要记住,C.CString 会主动为以下对象分配内存:你。然而,它不会自动释放这些内存,这取决于你的努力。要纠正这种情况,您必须通过显式调用 C.free 来手动释放分配的内存:
C.free(unsafe.Pointer(cstr))
通过采用这种方法,您可以确保正确处置分配的内存并避免内存泄漏否则会困扰你的代码。
以上是如何使用 CGO 安全地将 Go 字符串复制到 C char* 指针?的详细内容。更多信息请关注PHP中文网其他相关文章!