Go で const char * 型の C 配列を操作する場合、インデックス付けとエントリを Go 文字列に変換します。この問題は、配列要素へのアクセスに伴う低レベルのポインター演算に起因します。
この課題を克服するには、より安全で便利なアプローチは、C 配列を Go スライスに変換することです。この中間ステップにより、精度を確保しながら変換プロセスが簡素化されます。
arraySize := 3 cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize]
この操作により次のことが実現されます:
C 配列がスライスに変換されると、それを反復処理するのが簡単になります。以下に例を示します。
for _, cString := range cStrings { fmt.Println(C.GoString(cString)) }
このループは、C.GoString() を使用して Go 文字列に変換した後、C 配列の各要素を出力します。
NAME_OF_FIRST_THING NAME_OF_SECOND_THING NAME_OF_THIRD_THING
このアプローチに従うことで、直接ポインター算術の複雑さを回避しながら、const char * 型の C 配列の要素を効果的にインデックス付けして Go 文字列に変換できます。
以上が「cgo」を使用して「const char *」の C 配列に安全にアクセスして Go 文字列に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。