Accès à un tableau C de type const char * depuis Go
Problème
Un programme C définit un tableau de type const char *, nommé myStringArray, contenant une liste de chaînes. L'objectif est d'accéder à ce tableau à partir d'un programme Go à l'aide de cgo et de convertir chaque entrée du tableau en une chaîne Go.
Discussion
Cependant, le code Go fourni ne parvient pas à accéder correctement au tableau, mais il parcourt les caractères de la première chaîne du array.
Solution
Une meilleure approche consiste d'abord à convertir le tableau C en une tranche Go, ce qui offre un moyen plus pratique et plus sûr d'accéder à ses éléments. Voici comment cela peut être fait :
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)) }
Sortie :
NAME_OF_FIRST_THING NAME_OF_SECOND_THING NAME_OF_THIRD_THING
Cette solution garantit que chaque élément du tableau est correctement accessible en tant que chaîne Go distincte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!