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 ?
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!