首頁 >後端開發 >Golang >如何使用 CGO 安全地將 Go 字串複製到 C 字元指標?

如何使用 CGO 安全地將 Go 字串複製到 C 字元指標?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-01 08:11:101072瀏覽

How Do I Safely Copy a Go String to a C Char Pointer Using CGO?

使用CGO 將Go 字串複製到C 字元指標

在Go 中使用CGO 時,常見的要求是將Go 字串複製到C 字元指標。雖然將 Go 字串分配給 C 指標似乎很簡單,但正確的方法涉及使用 C.CString 函數。

不正確的複製嘗試

代碼:

func copy_string(cstr *C.char) {

    str := "foo"
    C.GoString(cstr) = str

}

不正確,因為 GoString 旨在將 C 字元指標轉換為 Go字串,而不是相反

正確的複製方法

根據CGO文檔,應該使用C.CString將Go字串轉換為C字串:

cstr = C.CString(str)

記憶體管理

請注意C.CString 為C字串分配記憶體但不釋放它。當您完成 C 字串後,您有責任透過呼叫

C.free(unsafe.Pointer(cstr))

來釋放此記憶體。

以上是如何使用 CGO 安全地將 Go 字串複製到 C 字元指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn