Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich mit cgo sicher auf ein C-Char-Array in Go zugreifen?

Wie kann ich mit cgo sicher auf ein C-Char-Array in Go zugreifen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-18 07:12:02736Durchsuche

How to Safely Access a C Char Array in Go using cgo?

Zugriff auf das C-Char-Array in Go mit cgo

In C stoßen wir häufig auf Arrays mit konstanten Zeichenzeigern (z. B. const char *myStringArray []). Der Zugriff auf solche Arrays von Go aus mit cgo kann sich als Herausforderung erweisen.

Falscher Ansatz:

Zunächst können Sie versuchen, das Array direkt mit unsicherer Zeigerarithmetik zu indizieren:

myGoString := C.GoString((*C.char) (unsafe.Pointer(uintptr(unsafe.Pointer(C.myStringArray)) + uintptr(index) * unsafe.Sizeof(C.myStringArray))))

Dieser Ansatz navigiert jedoch durch Zeichen innerhalb einer Zeichenfolge, nicht durch das Array selbst.

Richtige Lösung:

Eine zuverlässigere Lösung besteht darin, das C-Array in ein Go-Slice umzuwandeln.

// Define array size
arraySize := 3

// Create Go slice
cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize]

// Iterate over slice
for _, cString := range cStrings {
    fmt.Println(C.GoString(cString))
}

Dieser Ansatz gewährleistet die ordnungsgemäße Ausführung Indizierung des Arrays, wodurch Zugriff auf jedes String-Element in seiner Gesamtheit ermöglicht wird.

Durch das Verständnis der Feinheiten der Zeigermanipulation und des Nutzens von Go Slices können Sie die Lücke zwischen C- und Go-Speicherstrukturen effektiv schließen.

Das obige ist der detaillierte Inhalt vonWie kann ich mit cgo sicher auf ein C-Char-Array in Go zugreifen?. 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