I have a C file with an array of type const char *
, lets call it myStringArray[]
, something like:
const char *myStringArray[] = {
"NAME_OF_FIRST_THING",
"NAME_OF_SECOND_THING",
"NAME_OF_THIRD_THING"}
I need Go to index into that C array, using cgo
, and convert an array entry into a Go string. The following code compiles but does not work correctly; you can see from the output that follows, it is indexing along the strings rather than up the array:
myGoString := C.GoString((*C.char) (unsafe.Pointer(uintptr(unsafe.Pointer(C.myStringArray)) + uintptr(index) * unsafe.Sizeof(C.myStringArray))))
...result being this:
NAME_OF_FIRST_THING
FIRST_THING
ING
FYI, the purpose of this is to decode on a server a log file that was created on an embedded platform running C, hence the need to re-use the same logging index files.
I've been stabbing at this randomly for a few hours now without success. Can anyone correct my construction, or provide an alternative?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…