Как скопировать строку Go в C char * через CGO в golang?

Я хочу скопировать строку Go в char * через CGO.

Могу ли я сделать это что-то вроде этого?

func copy_string(cstr *C.char) {

    str := "foo"
    C.GoString(cstr) = str

}

person steve landiss    schedule 18.08.2016    source источник


Ответы (2)


Согласно документации cgo, вам необходимо использовать функцию C.CString для преобразования строки Go в строку C. нить:

cstr = C.CString(str)

Имейте в виду, что функция C.CString выделяет для вас память, но не освобождает ее, поэтому вы несете ответственность за освобождение памяти с помощью такого вызова:

C.free(unsafe.Pointer(cstr))
person jnmoal    schedule 18.08.2016
comment
лучше с defer C.free(unsafe.Pointer(cstr)) go вызовет, когда функция вернется - person Bear0x3f; 07.03.2018

использование cstr = C.CString(str) у меня не сработало, поэтому я выбрал то, что видел прямо на CGO библиотека: C.strcpy((*C.char)(cstr), (*C.char)(C.CString(str)))

person Luca Ruggieri    schedule 08.04.2021