Copie de chaînes Go vers un caractère C * Pointeurs à l'aide de CGO
Dans Go, la possibilité d'utiliser les capacités du langage de programmation C via CGO est importante . Une tâche courante consiste à copier des chaînes Go dans des pointeurs C char *. Cependant, l'approche mentionnée dans la question initiale :
func copy_string(cstr *C.char) { str := "foo" C.GoString(cstr) = str }
est incorrecte. La méthode correcte pour copier une chaîne Go vers un pointeur C char implique la fonction C.CString. Cette fonction convertit une chaîne Go en une chaîne de style C terminée par un caractère nul, qui peut être affectée à un pointeur char .
cstr := C.CString(str)
Il est important de noter que C.CString alloue de la mémoire pour le C. -chaîne de style, mais ne la libère pas automatiquement. Pour éviter les fuites de mémoire, il est crucial de libérer manuellement la mémoire allouée à l'aide de la fonction C.free :
C.free(unsafe.Pointer(cstr))
En utilisant ces fonctions, vous pouvez copier avec succès les chaînes Go dans les pointeurs C char *, permettant une intégration transparente entre Go et C. N'oubliez pas de gérer la gestion de la mémoire de manière appropriée pour garantir une exécution de code efficace et sûre.
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!