Maison > développement back-end > Golang > Comment accéder en toute sécurité à un tableau de caractères C dans Go à l'aide de cgo ?

Comment accéder en toute sécurité à un tableau de caractères C dans Go à l'aide de cgo ?

Linda Hamilton
Libérer: 2024-11-18 07:12:02
original
809 Les gens l'ont consulté

How to Safely Access a C Char Array in Go using cgo?

Accès à C Char Array dans Go avec cgo

En C, nous rencontrons souvent des tableaux de pointeurs de caractères constants (par exemple, const char *myStringArray []). Accéder à de tels tableaux depuis Go à l'aide de cgo peut s'avérer difficile.

Approche incorrecte :

Au départ, vous pouvez tenter d'indexer le tableau directement en utilisant une arithmétique de pointeur non sécurisée :

myGoString := C.GoString((*C.char) (unsafe.Pointer(uintptr(unsafe.Pointer(C.myStringArray)) + uintptr(index) * unsafe.Sizeof(C.myStringArray))))
Copier après la connexion

Cependant, cette approche naviguera dans les caractères d'une chaîne, pas dans le tableau lui-même.

Solution correcte :

Une solution plus fiable implique la conversion le tableau C dans une tranche Go.

// Define array size
arraySize := 3

// Create Go slice
cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize]

// Iterate over slice
for _, cString := range cStrings {
    fmt.Println(C.GoString(cString))
}
Copier après la connexion

Cette approche garantit une indexation appropriée du tableau, donnant accès à chaque élément de chaîne dans son intégralité.

En comprenant les subtilités de la manipulation du pointeur et l'utilité des tranches Go, vous pouvez combler efficacement le fossé entre les structures de mémoire C et Go.

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