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.

Reply via email to