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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-01 12:17:15509瀏覽

How to Safely Copy Go Strings to C char* Pointers using CGO?

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

在Go 領域,你可能會遇到需要無縫交換的情況Go 程式碼和C 函式庫或應用程式之間的資料。其中一個場景是使用 CGO 的功能將 Go 字串傳輸為 C 字元指標 (char *)。

挑戰:

產生複製 Go 的願望透過 CGO 的神奇功能將字串轉換為 char * 。問題依然存在:可以使用以下方法來實現嗎?

func copy_string(cstr *C.char) {
    str := "foo"
    C.GoString(cstr) = str
}

解:

雖然意圖是崇高的,但程式碼片段中呈現的方法卻失敗了短的。根據CGO 官方文檔,將Go 字串轉換為C 字串的正確方法涉及利用C.CString 函數:

cstr = C.CString(str)

重要的是要記住,C.CString 會主動為以下物件分配內存:你。然而,它不會自動釋放這些內存,這取決於你的努力。要修正這種情況,您必須透過明確呼叫C.free 來手動釋放分配的記憶體:

C.free(unsafe.Pointer(cstr))

透過採用此方法,您可以確保正確處置分配的記憶體並避免記憶體洩漏否則會困擾你的程式碼。

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

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