1 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
C 中的數(shù)組不是由 cgo 透明處理的。
有一種叫做慣用語(yǔ)Go的東西,它將C內(nèi)存映射到Go可以自然操縱的東西上。下面是一個(gè)工作示例 ():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)鍵部分是.這說(shuō)明的是一個(gè)非常大的恒定大小數(shù)組(“對(duì)任何人來(lái)說(shuō)都足夠大”......),但只從中提取感興趣的元素。(*[1 << 30]*C.char)(unsafe.Pointer(&C.s))&C.s[x]
使用 應(yīng)該是一個(gè)警告,即超出實(shí)際 C 數(shù)組的末尾將產(chǎn)生不可預(yù)測(cè)的結(jié)果。實(shí)際上,它可能會(huì)使程序崩潰。unsafe.Pointer()
- 1 回答
- 0 關(guān)注
- 110 瀏覽
添加回答
舉報(bào)