gpt4 book ai didi

cgo - 如何将字符串转换为 C 固定字符数组

转载 作者:IT王子 更新时间:2023-10-29 00:40:36 24 4
gpt4 key购买 nike

我正在尝试在我的 Go 代码中实例化一个 C 结构。结构定义如下(在我无法修改的外部库中):

typedef struct {
char field1[256];
} S1

接下来,我这样做了:

func myfunc(mystr string){
// We need to convert mystr from string to char array
cStr := C.CString(mystr)
defer C.free(unsafe.Pointer(cStr)

// Should work now
s1 := &C.S1{field1: cStr}

// Do something with s1...
}

但它无法编译,因为:

cannot use cStr (type *C.char) as type [256]C.char in field value

我试过强制 ([256]C.char)(cStr) 但它显然也不起作用。

有没有办法实现我想要做的事情?

最佳答案

最简单的解决方案是将结构的字段定义更改为字符指针,这对于 C 中的字符串来说是非常标准的:

typedef struct {
char *field1;
} S1

更复杂的解决方案是[1]:

arr := [256]C.char{}

for i := 0; i < len(mystr) && i < 255; i++ { // leave element 256 at zero
arr[i] = C.char(mystr[i])
}

s1 := &C.S1{field1: arr}

[1] 代码未经测试,无法在此工作站上编译。

关于cgo - 如何将字符串转换为 C 固定字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25327313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com