当前位置: 首页 > 知识库问答 >
问题:

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

乔宏峻
2023-03-14

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

我可以这样做吗?

func copy_string(cstr *C.char) {

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

}

共有2个答案

傅朗
2023-03-14

使用<code>cstr=C.CString(str)

黄宏毅
2023-03-14

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

cstr = C.CString(str)

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

C.free(unsafe.Pointer(cstr))
 类似资料:
  • 问题内容: 我想通过CGO将Go字符串复制到char *中。 我可以这样做吗? 问题答案: 根据cgo文档,您需要使用C.CString函数将Go字符串转换为C字符串: 请注意,C.CString函数为您分配了内存,但不会释放它,因此您有责任通过如下调用来释放内存:

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

  • 问题内容: 我正在构建Android应用程序的项目的C 方面。我需要一些信息(通过字符串和字符串数组)传递给Java应用程序(通过JNI)。我以前从未做过,相反方向的人没有C 的经验,并承认他们不能真正提供帮助。 我确实找到了以下代码(从这里开始) 但这对我来说毫无意义。通常,我不确定如何将其合并到程序的C ++端,而且我无法确切了解其工作原理。代码是否在执行该行时发出消息?还是在for循环中执行

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

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

  • 我正在尝试在Go中开发一个将由C程序调用的例程。Go如下所示: 如果我用一些硬编码的值替换return k.Key语句,则一切正常,C或C可以调用导出的GetKey函数。当我尝试从k.Key返回解码的JSON字符串,甚至只是从名为body的变量返回字符串时,我收到一个错误: 运行时错误:cgo结果具有go指针Go routine 17[正在运行,锁定到线程] 我按如下方式构建它: 去构建 -构建模