Я хочу скопировать строку Go в char * через CGO.
Могу ли я сделать это что-то вроде этого?
func copy_string(cstr *C.char) {
str := "foo"
C.GoString(cstr) = str
}
Я хочу скопировать строку Go в char * через CGO.
Могу ли я сделать это что-то вроде этого?
func copy_string(cstr *C.char) {
str := "foo"
C.GoString(cstr) = str
}
Согласно документации cgo, вам необходимо использовать функцию C.CString для преобразования строки Go в строку C. нить:
cstr = C.CString(str)
Имейте в виду, что функция C.CString выделяет для вас память, но не освобождает ее, поэтому вы несете ответственность за освобождение памяти с помощью такого вызова:
C.free(unsafe.Pointer(cstr))
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)))