2017-01-31 10 views
0

Как вы думаете, лучший способ инициализировать C.CString с длиной x в CGO? Справочная информация: Мне нужен символ * из правильного размера для параметра функции C, но я полагаю, следующий код может быть улучшен:Как инициализировать пустую C.CString в cgo

// length = 6 
var buffer [6]byte 
name := C.CString(string(buffer[:6])) 
defer C.free(unsafe.Pointer(name)) 

или

// length = 6 
name := C.CString("  ") 
defer C.free(unsafe.Pointer(name)) 

ответ

1

Если вам не нужно, чтобы преобразовать string, просто malloc размер, в котором вы нуждаетесь:

s := C.malloc(6) 
defer C.free(unsafe.Pointer(s)) 
+0

Это действительно имеет смысл, но как мне его преобразовать обратно в строку go? – netsplit

+0

'newString: = C.GoString ((* C.char) (s))' is – netsplit

+0

@netsplit: да, вы конвертируете указатель в '* C.char', если вы хотите скопировать байты обратно в Пойдите в строку. – JimB

 Смежные вопросы

  • Нет связанных вопросов^_^