Home > Article > Backend Development > How to Correctly Access a C Array of `const char*` Strings from Go?
Accessing C Array of const char * from Go
You're attempting to access a C array of const char from Go using cgo. Specifically, you have a C array of strings, and you want to index into it and convert the array entry into a Go string.
The Incorrect Approach
Your current code attempts to do so with pointer arithmetic:
myGoString := C.GoString((*C.char) (unsafe.Pointer(uintptr(unsafe.Pointer(C.myStringArray)) + uintptr(index) * unsafe.Sizeof(C.myStringArray))))
However, this approach is incorrect because it indexes along the characters of the string rather than up the array. As a result, you get the first few characters of each string instead of the entire string.
The Correct Solution
To correctly access the C array, it's safer and more convenient to first convert it into a Go slice:
import "unsafe" const arraySize = 3 cStrings := (*[arraySize]*C.char)(unsafe.Pointer(&C.myStringArray))[:arraySize:arraySize] for _, cString := range cStrings { fmt.Println(C.GoString(cString)) }
By converting the C array to a Go slice, you can then iterate over its elements and convert each element to a Go string using C.GoString().
Sample Output
This approach ensures that you get the entire string from the C array, as seen in the following sample output:
NAME_OF_FIRST_THING NAME_OF_SECOND_THING NAME_OF_THIRD_THING
The above is the detailed content of How to Correctly Access a C Array of `const char*` Strings from Go?. For more information, please follow other related articles on the PHP Chinese website!