cgo-如何将字符串转换为C固定的char数组
我正在尝试在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...
}
但是它不能编译,因为:
字段值中不能使用cStr(类型* C.char)作为类型[256] C.char
我试过强制([256] C.char)(cStr),但显然也不起作用。
有没有办法实现我想做的事情?
回答:
最简单的解决方案是将结构的字段定义更改为char-pointer,这对于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固定的char数组 的全部内容, 来源链接: utcz.com/qa/426324.html