Zugriff auf ein C-Array vom Typ const char * von Go aus
Problem
Ein C-Programm definiert ein Array vom Typ const char * mit dem Namen myStringArray, das eine Liste von Zeichenfolgen enthält. Das Ziel besteht darin, von einem Go-Programm aus mit cgo auf dieses Array zuzugreifen und jeden Array-Eintrag in einen Go-String umzuwandeln.
Diskussion
Der bereitgestellte Go-Code schlägt jedoch fehl Greifen Sie korrekt auf das Array zu, sondern iteriert stattdessen über die Zeichen der ersten Zeichenfolge im Array.
Lösung
Ein besserer Ansatz besteht darin, zuerst das C-Array in ein Go-Slice zu konvertieren, was eine bequemere und sicherere Möglichkeit bietet, auf seine Elemente zuzugreifen. So geht das:
import "C" import "fmt" // Convert the C array into a Go slice of pointers to C (null-terminated) strings. arraySize := 3 cStrings := (*[1 << 30]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize] // Iterate over the slice and convert each C string into a Go string. for _, cString := range cStrings { fmt.Println(C.GoString(cString)) }
Ausgabe:
NAME_OF_FIRST_THING NAME_OF_SECOND_THING NAME_OF_THIRD_THING
Diese Lösung stellt sicher, dass auf jedes Array-Element korrekt als eindeutiger Go-String zugegriffen wird.
Das obige ist der detaillierte Inhalt vonWie greife ich von Go aus auf ein C-Array „const char*' zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!