Go から const char * の C 配列にアクセス
const char cgo を使用して Go から。具体的には、C の文字列配列があり、それにインデックスを付けて配列エントリを Go 文字列に変換したいとします。
間違ったアプローチ
現在のコードはポインター算術演算を使用してこれを実行しようとします:myGoString := C.GoString((*C.char) (unsafe.Pointer(uintptr(unsafe.Pointer(C.myStringArray)) + uintptr(index) * unsafe.Sizeof(C.myStringArray))))ただし、このアプローチは配列を上向きに作成するのではなく、文字列の文字に沿ってインデックスを作成するため、正しくありません。その結果、文字列全体ではなく、各文字列の最初の数文字が取得されます。
正しい解決策
C 配列に正しくアクセスするには、より安全で、最初に Go スライスに変換すると便利です:import "unsafe" const arraySize = 3 cStrings := (*[arraySize]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize] for _, cString := range cStrings { fmt.Println(C.GoString(cString)) }C 配列を Go スライスに変換すると、その要素を反復処理し、C.GoString( を使用して各要素を Go 文字列に変換できます) ).
サンプル出力
次のサンプル出力に示すように、このアプローチにより、C 配列から文字列全体が確実に取得されます。以上がGo から `const char*` 文字列の C 配列に正しくアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。