当前位置: 首页 > 面试题库 >

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

吴举
2023-03-14
问题内容

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

我可以这样做吗?

func copy_string(cstr *C.char) {

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

}

问题答案:

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

cstr = C.CString(str)

请注意,C.CString函数为您分配了内存,但不会释放它,因此您有责任通过如下调用来释放内存:

C.free(unsafe.Pointer(cstr))


 类似资料:
  • 我想通过 CGO 将 Go 字符串复制到字符 * 中。 我可以这样做吗?

  • 问题内容: 如何获得“ E”输出而不是69? Golang是否具有将字符转换为字节,反之亦然的功能? 问题答案: 解释的字符串文字是使用单个字符的UTF-8编码(可能是多字节)在双引号“”之间的字符序列。在UTF-8中,ASCII字符是单字节,对应于前128个Unicode字符。字符串的行为就像字节片。符文是标识Unicode代码点的整数值。因此, 输出: 读: 进入转换的编程语言规范部分。 Go

  • 如何得到一个“E”的输出而不是69? Golang是否有将字符转换为字节的功能,反之亦然?

  • 问题内容: 我正在尝试从C创建一个go字符串。我有指针和长度,所以如果我从go开始,可以调用该函数。 生成结构,所以我想知道是否可以直接使用它: 我在这里用它来控制我的生命。在随后作为参数传递给函数去: Go的垃圾收集器会尝试回收内存吗? 问题答案: Go的垃圾回收器不会尝试回收使用C内存分配器分配的内存。您所描述的应该是安全的。当然,您可能无法释放C内存,因为您不知道Go将在何时完成。

  • 问题内容: 我有以下代码将数据从stdout输出到文件: 我需要将输出从stdout转换为字符串值而不是文件。我该如何实现? 可能还有另一个函数可以让我将io.Copy行更改为io.Copy(myStringVariable,stdoutPipe),因为我需要读取命令的输出并对其进行一些处理? 提前致谢 问题答案: 您不需要管道,编写器,goroutine等。只需使用Cmd.Output 您可以将