C.CBytes does essentially this, but you either need to start with a []byte, or the string conversion could be a second copy.
I don't see a need for a separate version CString without the null when you can just pass the length-1. In the rare case that the extra byte makes a difference, you could just define your own version func CStringNoNull(s string) unsafe.Pointer { p := C.malloc(uintptr(len(s))) pp := (*[1<<30]byte)(p) copy(pp[:], s) return p } On Monday, October 31, 2016 at 10:55:50 AM UTC-4, Peter Mogensen wrote: > > > > On 2016-10-31 15:39, Pietro Gagliardi wrote: > > Just pass the null-terminated string and use C.int(len(goString)) as the > length. > > Yes... I mentioned that as a somewhat solution. ... it still allocates 1 > byte more than needed. > > /Peter > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.