How do I convert a Go array of strings to a C array of strings?

后端 未结 1 1419
别跟我提以往
别跟我提以往 2021-02-09 11:05

I am using cgo in a project, and I want to export a function for use. Here\'s an example of what I want to achieve:

package csplit

import (
    \"C         


        
1条回答
  •  走了就别回头了
    2021-02-09 11:37

    You're returning a Go slice which is allocated in Go, and is a different structure than a C array. You need to allocate an array in C:

    //export Split
    func Split(original *C.char, split *C.char) **C.char {
        goResult := strings.Split(C.GoString(original), C.GoString(split))
        cArray := C.malloc(C.size_t(len(goResult)) * C.size_t(unsafe.Sizeof(uintptr(0))))
    
        // convert the C array to a Go Array so we can index it
        a := (*[1<<30 - 1]*C.char)(cArray)
    
        for idx, substring := range goResult {
            a[idx] = C.CString(substring)
        }
    
        return (**C.char)(cArray)
    }
    

    0 讨论(0)
提交回复
热议问题