Heim > Artikel > Backend-Entwicklung > Wie greife ich von Go aus korrekt auf ein C-Array von „const char*'-Strings zu?
Zugriff auf C-Array von const char * von Go aus
Sie versuchen, auf ein C-Array von const char von Go mit cgo. Konkret haben Sie ein C-Array von Strings und möchten darin einen Index erstellen und den Array-Eintrag in einen Go-String konvertieren.
Der falsche Ansatz
Ihr aktueller Code versucht dies mit Zeigerarithmetik:myGoString := C.GoString((*C.char) (unsafe.Pointer(uintptr(unsafe.Pointer(C.myStringArray)) + uintptr(index) * unsafe.Sizeof(C.myStringArray))))Dieser Ansatz ist jedoch falsch, da er entlang der Zeichen von indiziert die Zeichenfolge und nicht das Array nach oben. Als Ergebnis erhalten Sie die ersten paar Zeichen jeder Zeichenfolge anstelle der gesamten Zeichenfolge.
Die richtige Lösung
Der korrekte Zugriff auf das C-Array ist sicherer und sicherer bequemer, es zuerst in ein Go-Slice umzuwandeln:import "unsafe" const arraySize = 3 cStrings := (*[arraySize]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize] for _, cString := range cStrings { fmt.Println(C.GoString(cString)) }Durch die Konvertierung des C-Arrays in ein Go-Slice können Sie dann über seine Elemente iterieren und jedes konvertieren Element zu einem Go-String mit C.GoString().
Beispielausgabe
Dieser Ansatz stellt sicher, dass Sie den gesamten String aus dem C-Array erhalten, wie im gezeigt folgende Beispielausgabe:Das obige ist der detaillierte Inhalt vonWie greife ich von Go aus korrekt auf ein C-Array von „const char*'-Strings zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!