Heim >Backend-Entwicklung >Golang >Wie kopiere ich mit CGO sicher einen Go-String in einen C-Char-Zeiger?
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 }
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)
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))
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!