Maison > développement back-end > Golang > Comment copier en toute sécurité une chaîne Go vers un pointeur de caractère C à l'aide de CGO ?

Comment copier en toute sécurité une chaîne Go vers un pointeur de caractère C à l'aide de CGO ?

Mary-Kate Olsen
Libérer: 2024-12-01 08:11:10
original
983 Les gens l'ont consulté

How Do I Safely Copy a Go String to a C Char Pointer Using CGO?

Copier des chaînes Go vers des pointeurs de caractère C à l'aide de CGO

Lorsque vous travaillez avec CGO dans Go, une exigence courante est de copier une chaîne Go dans un pointeur de caractère C. Bien qu'il puisse sembler simple d'attribuer la chaîne Go au pointeur C, l'approche appropriée consiste à utiliser la fonction C.CString.

Tentative de copie incorrecte

Le code :

func copy_string(cstr *C.char) {

    str := "foo"
    C.GoString(cstr) = str

}
Copier après la connexion

est incorrect car GoString est destiné à convertir des pointeurs de caractère C en chaînes Go, pas vice-versa versa.

Méthode de copie correcte

Selon la documentation CGO, vous devez utiliser C.CString pour convertir une chaîne Go en chaîne C :

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

Gestion de la mémoire

Notez que C.CString alloue de la mémoire pour la chaîne C mais ne la libère pas. Il est de votre responsabilité de libérer cette mémoire à l'aide d'un appel à :

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

quand vous avez terminé avec la chaîne 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!

source:php.cn
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