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

回到顶部