1 回答

TA貢獻1851條經(jīng)驗 獲得超5個贊
C 中的數(shù)組不是由 cgo 透明處理的。
有一種叫做慣用語Go的東西,它將C內(nèi)存映射到Go可以自然操縱的東西上。下面是一個工作示例 ():main.go
package main
import (
"fmt"
"unsafe"
)
// #cgo LDFLAGS: -L${SRCDIR} -la
// #include "./a.h"
import "C"
func main() {
x := 1
fmt.Println(x)
fmt.Println(len(C.s)) // Note, Go has no idea so it says 0.
cStr := (*[1 << 30]*C.char)(unsafe.Pointer(&C.s))[x]
fmt.Println(C.GoString(cStr))
}
關(guān)鍵部分是.這說明的是一個非常大的恒定大小數(shù)組(“對任何人來說都足夠大”......),但只從中提取感興趣的元素。(*[1 << 30]*C.char)(unsafe.Pointer(&C.s))&C.s[x]
使用 應(yīng)該是一個警告,即超出實際 C 數(shù)組的末尾將產(chǎn)生不可預(yù)測的結(jié)果。實際上,它可能會使程序崩潰。unsafe.Pointer()
- 1 回答
- 0 關(guān)注
- 104 瀏覽
添加回答
舉報