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)) }
Output:
NAME_OF_FIRST_THING NAME_OF_SECOND_THING NAME_OF_THIRD_THING
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!