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
Mary-Kate OlsenOriginal
2024-12-01 08:11:10980Durchsuche

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

}

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!

Stellungnahme:
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