Maison >développement back-end >Golang >Comment copier en toute sécurité des chaînes Go vers des pointeurs C `char*` à l'aide de CGO ?

Comment copier en toute sécurité des chaînes Go vers des pointeurs C `char*` à l'aide de CGO ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-27 05:35:14790parcourir

How Do I Safely Copy Go Strings to C `char*` Pointers Using CGO?

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!

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