我正在尝试在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]未经测试的代码,无法在此工作站上编译。