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
Libérer: 2024-12-01 12:17:15
original
603 Les gens l'ont consulté

How to Safely Copy Go Strings to C char* Pointers using CGO?

Copier des chaînes Go vers des pointeurs C char* à l'aide de CGO

Dans le domaine de Go, vous pouvez rencontrer des situations où vous devez échanger de manière transparente données entre votre code Go et les bibliothèques ou applications C. Un de ces scénarios est le transfert de chaînes Go en pointeurs de caractères C (char *) en utilisant la puissance de CGO.

Défi :

Le désir surgit de copier un Go chaîne en un caractère * via les capacités magiques de CGO. La question persiste : cela peut-il être réalisé en utilisant l'approche suivante ?

func copy_string(cstr *C.char) {
    str := "foo"
    C.GoString(cstr) = str
}
Copier après la connexion

Solution :

Bien que l'intention soit noble, l'approche présentée dans l'extrait de code tombe court. Selon la documentation officielle de CGO, la méthode correcte pour convertir une chaîne Go en chaîne C implique d'utiliser la fonction C.CString :

cstr = C.CString(str)
Copier après la connexion

Il est important de garder à l'esprit que C.CString alloue obligatoirement de la mémoire pour toi. Cependant, il ne libère pas automatiquement cette mémoire, la laissant à vos efforts diligents. Pour remédier à cette situation, vous devez libérer manuellement la mémoire allouée en effectuant un appel explicite à C.free :

C.free(unsafe.Pointer(cstr))
Copier après la connexion

En adoptant cette approche, vous garantissez la bonne élimination de la mémoire allouée et évitez les fuites de mémoire qui sinon hantez votre code.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal