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
Linda Hamiltonoriginal
2024-11-18 07:12:02892parcourir

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))))

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 <p>Cette approche garantit une indexation appropriée du tableau, donnant accès à chaque élément de chaîne dans son intégralité.</p><p>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.</p>

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!

Déclaration:
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