Heim > Backend-Entwicklung > Golang > Wie kopiere ich mit CGO sicher einen Go-String in einen C-Char-Zeiger?

Wie kopiere ich mit CGO sicher einen Go-String in einen C-Char-Zeiger?

Mary-Kate Olsen
Freigeben: 2024-12-01 08:11:10
Original
1035 Leute haben es durchsucht

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

Kopieren von Go-Strings in C-Char-Zeiger mit CGO

Bei der Arbeit mit CGO in Go besteht eine häufige Anforderung darin, einen Go-String hinein zu kopieren ein C-Zeichenzeiger. Während es einfach erscheinen mag, den Go-String dem C-Zeiger zuzuweisen, besteht der richtige Ansatz darin, die Funktion C.CString zu verwenden.

Falscher Kopierversuch

Der Code:

func copy_string(cstr *C.char) {

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

}
Nach dem Login kopieren

ist falsch, da GoString für die Konvertierung von C-Zeichenzeigern in Go-Strings gedacht ist, nicht umgekehrt umgekehrt.

Korrekte Kopiermethode

Laut der CGO-Dokumentation sollten Sie C.CString verwenden, um einen Go-String in einen C-String zu konvertieren:

cstr = C.CString(str)
Nach dem Login kopieren

Speicherverwaltung

Beachten Sie, dass C.CString reserviert Speicher für den C-String, gibt ihn aber nicht frei. Es liegt in Ihrer Verantwortung, diesen Speicher freizugeben, indem Sie Folgendes aufrufen:

C.free(unsafe.Pointer(cstr))
Nach dem Login kopieren

wenn Sie mit der C-Saite fertig sind.

Das obige ist der detaillierte Inhalt vonWie kopiere ich mit CGO sicher einen Go-String in einen C-Char-Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage