Heim > Backend-Entwicklung > Golang > Wie greife ich von Go aus auf ein C-Array „const char*' zu?

Wie greife ich von Go aus auf ein C-Array „const char*' zu?

Patricia Arquette
Freigeben: 2024-11-26 13:40:11
Original
357 Leute haben es durchsucht

How to Access a C `const char*` Array from Go?

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))
}
Nach dem Login kopieren

Ausgabe:

NAME_OF_FIRST_THING
NAME_OF_SECOND_THING
NAME_OF_THIRD_THING
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage