Maison > développement back-end > Golang > le corps du texte

Comment puis-je accéder en toute sécurité et convertir un tableau C de « const char * » en chaînes Go à l'aide de « cgo » ?

Barbara Streisand
Libérer: 2024-11-20 22:59:13
original
605 Les gens l'ont consulté

How Can I Safely Access and Convert a C Array of `const char *` to Go Strings Using `cgo`?

Accès aux tableaux C de type const char * depuis Go à l'aide de Cgo

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.

Conversion d'un tableau C en un Go Slice

arraySize := 3
cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize]
Copier après la connexion

Cette opération permet d'obtenir les résultats suivants :

  • arraySize définit le nombre d'éléments dans le tableau.
  • *C.char déclare un pointeur vers un caractère C type.
  • unsafe.Pointer(&C.myStringArray) obtient l'adresse mémoire du premier élément du tableau myStringArray.
  • [:arraySize:arraySize] crée une tranche Go pointant vers le même C éléments du tableau, avec une foulée de arraySize.

Itération sur la tranche et conversion Entrées

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))
}
Copier après la connexion

Cette boucle imprime chaque élément du tableau C après l'avoir converti en chaîne Go à l'aide de C.GoString().

Exemple de sortie

NAME_OF_FIRST_THING
NAME_OF_SECOND_THING
NAME_OF_THIRD_THING
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal