Go から const char * 型の C 配列にアクセスする
問題
C プログラムmyStringArray という名前の const char * 型の配列を定義します。文字列。目標は、cgo を使用して Go プログラムからこの配列にアクセスし、各配列エントリを Go 文字列に変換することです。
ディスカッション
ただし、提供された Go コードは失敗します。配列に正しくアクセスする代わりに、配列内の最初の文字列の文字を反復処理します。 array.
解決策
より良いアプローチは、まず C 配列を Go スライスに変換することです。これにより、その要素にアクセスするためのより便利で安全な方法が提供されます。これを行う方法は次のとおりです:
import "C" import "fmt" // Convert the C array into a Go slice of pointers to C (null-terminated) strings. arraySize := 3 cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize] // Iterate over the slice and convert each C string into a Go string. for _, cString := range cStrings { fmt.Println(C.GoString(cString)) }
出力:
NAME_OF_FIRST_THING NAME_OF_SECOND_THING NAME_OF_THIRD_THING
このソリューションにより、各配列要素が個別の Go 文字列として正しくアクセスされるようになります。
以上がGo から C `const char*` 配列にアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。