我試圖在我的 Go 代碼中實(shí)例化一個(gè) C 結(jié)構(gòu)。結(jié)構(gòu)體是這樣定義的(在我無法修改的外部庫中):typedef struct { char field1[256];} S1在go中,我這樣做了: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...}但它不能編譯,因?yàn)椋翰荒茉谧侄沃抵惺褂?cStr(類型 *C.char)作為類型 [256]C.char我試過強(qiáng)制 ([256]C.char)(cStr) 但它顯然也不起作用。有沒有辦法實(shí)現(xiàn)我想要做的事情?
2 回答

蝴蝶刀刀
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
最簡單的解決方案是將結(jié)構(gòu)的字段定義更改為字符指針,這對于 C 中的字符串來說是非常標(biāo)準(zhǔn)的:
typedef struct {
char *field1;
} S1
更復(fù)雜的解決方案是[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]代碼未經(jīng)測試,無法在此工作站上編譯。
- 2 回答
- 0 關(guān)注
- 342 瀏覽
添加回答
舉報(bào)
0/150
提交
取消