On Tue, 18 Apr 2017 18:09:03 -0700 (PDT) hui zhang <fastfad...@gmail.com> wrote:
> > > c code > > > string getstring() {...} > > > go > > > string gostr = ????(C.getstring()) > > Oh, and note that std::string is a fat object. > > > > So if getstring() really returns an instance of std::string, > > and you need to actually extract its "raw bytes", you'd need to > > call the c_str() method of std::string on that object before > > applying the techniques from [1] to it. > > > > 1. https://github.com/golang/go/wiki/cgo#go-strings-and-c-strings > > > assume there is a c++ function string getpath() > you mean I should do this ? > > char *CGetPath() { > > auto str=getpath; > > char *c = malloc(str.length()), > > strcpy(c,str.c_str()); > > return c; > > } I beleive there's no need to do malloc() and copy the bytes over: c_str () is defined to return to you a pointer to a contiguous array of NUL-terminated representation of the string maintained by the std::string instance. So you do (untested): char *CGetPath() { return getpath().c_str(); } and then in your Go code you do p := C.GoString(C.GetPath()) 2. http://en.cppreference.com/w/cpp/string/basic_string/c_str -- 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.