Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengakses Array C `const char*` daripada Go?

Bagaimana untuk Mengakses Array C `const char*` daripada Go?

Patricia Arquette
Lepaskan: 2024-11-26 13:40:11
asal
356 orang telah melayarinya

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

Mengakses Tatasusunan C Jenis const char * daripada Go

Masalah

Atur cara C mentakrifkan tatasusunan jenis const char *, bernama myStringArray, mengandungi senarai rentetan. Matlamatnya adalah untuk mengakses tatasusunan ini daripada atur cara Go menggunakan cgo dan menukar setiap entri tatasusunan kepada rentetan Go.

Perbincangan

Walau bagaimanapun, kod Go yang disediakan gagal mengakses tatasusunan dengan betul, sebaliknya ia melelang ke atas aksara rentetan pertama dalam tatasusunan.

Penyelesaian

Pendekatan yang lebih baik adalah dengan terlebih dahulu menukar tatasusunan C menjadi kepingan Go, yang menyediakan cara yang lebih mudah dan selamat untuk mengakses elemennya. Begini cara ini boleh dilakukan:

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))
}
Salin selepas log masuk

Output:

NAME_OF_FIRST_THING
NAME_OF_SECOND_THING
NAME_OF_THIRD_THING
Salin selepas log masuk

Penyelesaian ini memastikan setiap elemen tatasusunan diakses dengan betul sebagai rentetan Go yang berbeza.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Array C `const char*` daripada Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan