Lors de l'appel d'une fonction C qui attend un pointeur vers un pointeur vers un tableau de chaînes, comment cela peut-il être réalisé dans Go tout en permettant également à la fonction C de modifier la chaîne array?
Créer une tranche dans Go et la transmettre directement à une fonction C n'est pas possible en raison des différences dans les structures de données et l'allocation de mémoire. Au lieu de cela, il est nécessaire d'allouer le tableau en C.
// Allocate an array in C cArray := C.malloc(C.size_t(c_count) * C.size_t(unsafe.Sizeof(uintptr(0)))) // Convert C array to Go array a := (*[1<<30 - 1]*C.char)(cArray) // Copy Go strings to C array for index, value := range strs { a[index] = C.CString(value) } // Call C function with pointer to array pointer err := C.f(&c_count, (***C.char)(unsafe.Pointer(&cArray)))
En allouant le tableau en C, cela permet à la fonction C de modifier et de redimensionner le tableau. Les modifications apportées en C seront reflétées dans la tranche Go après le retour de la fonction C.
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!