首頁 > 後端開發 > Golang > 主體

如何使用'cgo”安全存取'const char *”的 C 陣列並將其轉換為 Go 字串?

Barbara Streisand
發布: 2024-11-20 22:59:13
原創
605 人瀏覽過

How Can I Safely Access and Convert a C Array of `const char *` to Go Strings Using `cgo`?

使用Cgo 從Go 存取const char * 類型的C 陣列

在Go 中使用const char * 類型的C 陣列時,您可能會遇到索引和索引方面的困難將條目轉換為Go 字串。這個問題源自於存取數組元素時涉及的低階指標運算。

為了克服這個挑戰,更安全、更方便的方法是將 C 陣列轉換為 Go 切片。這個中間步驟簡化了轉換過程,同時也確保了準確性。

將 C 數組轉換為 Go 切片

arraySize := 3
cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize]
登入後複製

此操作實現以下目標:

  • arraySize定義數組中元素的數量。
  • *C.char 宣告一個指向 C char 類型的指標。
  • unsafe.Pointer(&C.myStringArray) 取得第一個元素的記憶體位址在 myStringArray 陣列中。
  • [:arraySize:arraySize] 建立一個指向相同 C 陣列元素的 Go 切片,步幅為 arraySize。

迭代切片並轉換條目

一旦 C 數組轉換為切片,對其進行迭代就變得很簡單。下面是一個範例:

for _, cString := range cStrings {
    fmt.Println(C.GoString(cString))
}
登入後複製

使用 C.GoString() 將 C 陣列轉換為 Go 字串後,此迴圈將列印 C 陣列的每個元素。

範例輸出

NAME_OF_FIRST_THING
NAME_OF_SECOND_THING
NAME_OF_THIRD_THING
登入後複製

透過遵循此方法,您可以有效地索引const char * 類型的C 陣列中的元素並將其轉換為Go 字串,避免直接指針算術的複雜性。

以上是如何使用'cgo”安全存取'const char *”的 C 陣列並將其轉換為 Go 字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板