1 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
通過指向 C 的指針傳遞字符串時(shí),您需要使用 length ( n) inGoString來獲取正確數(shù)量的字符,因?yàn)樽址?atp未\0終止?;蛘吣梢苑祷?C.char而不是string使用C.CString()在 C 堆上分配副本(然后您負(fù)責(zé)在使用后釋放)。請(qǐng)參閱此處的Cgo 文檔。
您的代碼中發(fā)生的事情是printf()簡(jiǎn)單地打印從指向的位置開始的所有字符,string.p直到它到達(dá)\0終止符 - 這就是為什么您在test.
因此,您可以執(zhí)行以下任一操作:
printf("%.*s\n", testString.n, testString.p);
(但請(qǐng)注意,大多數(shù)對(duì)預(yù)期\0終止的 C 字符串進(jìn)行操作的函數(shù)將無法在此指針上工作,除非它們也占用字符串的長(zhǎng)度)
或?qū)?Go 部分更改為這樣的內(nèi)容,然后free()在 C 端使用后使用指針:
func GetTestString() *C.char {
return C.CString("test") // CString will allocate string on C heap
}
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報(bào)