ホームページ >バックエンド開発 >Golang >Go から C `const char*` 配列にアクセスする方法

Go から C `const char*` 配列にアクセスする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-26 13:40:11425ブラウズ

How to Access a C `const char*` Array from Go?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。