2017-01-31 4 views
0

Was ist Ihrer Meinung nach der beste Weg, um eine C.CString mit Länge x in CGO zu initialisieren? Hintergrund: Ich brauche einen char * einer geeigneten Größe für eine C-Funktion Parameter, aber ich nehme an folgenden Code verbessert werden kann:Wie initialisiert man leere C.CString in cgo

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

oder

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

Antwort

1

Wenn Sie ein nicht konvertieren müssen string, nur malloc die Größe, die Sie brauchen:

+0

Das macht eigentlich Sinn, aber wie konvertiere ich es wieder zu einem Go-String am Ende? – netsplit

+0

'newString: = C.GoString ((* .Char) (s)) es ist – netsplit

+0

@netsplit: Ja, Sie konvertieren den Zeiger zu einem' * C.char', wenn Sie die Bytes zurück in a kopieren möchten Schnur gehen. – JimB