Lorsque vous travaillez avec des tableaux C de type const char * dans Go, vous pouvez rencontrer des difficultés d'indexation et convertir les entrées en chaînes Go. Ce problème provient de l'arithmétique des pointeurs de bas niveau impliquée dans l'accès aux éléments du tableau.
Pour surmonter ce défi, une approche plus sûre et plus pratique consiste à convertir le tableau C en une tranche Go. Cette étape intermédiaire simplifie le processus de conversion tout en garantissant la précision.
arraySize := 3 cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize]
Cette opération permet d'obtenir les résultats suivants :
Une fois le tableau C converti en tranche, l'itérer devient simple. Voici un exemple :
for _, cString := range cStrings { fmt.Println(C.GoString(cString)) }
Cette boucle imprime chaque élément du tableau C après l'avoir converti en chaîne Go à l'aide de C.GoString().
NAME_OF_FIRST_THING NAME_OF_SECOND_THING NAME_OF_THIRD_THING
En suivant cette approche, vous pouvez efficacement indexer et convertir des éléments d'un tableau C de type const char * en chaînes Go, en évitant les complexités du pointeur direct arithmétique.
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!