使用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中文網其他相關文章!