question about keeeping reference to toStringz()

Dr.No jckj33 at gmail.com
Thu May 31 01:12:34 UTC 2018


On Wednesday, 30 May 2018 at 20:43:48 UTC, Ali Çehreli wrote:
> On 05/30/2018 01:09 PM, Dr.No wrote:
>
> > consider a C function with this prototype:
> >> void foo(const char *baa);
> >
> > Does it means I should do:
> >
> >> string s = ...;
> >> auto cstring = s.toStringz;
> >> foo(cstring);
> >
> > rather just:
> >
> >> foo(s.toStringz);
> >
> > ?
>
> It depends. cstring method above is not sufficient if cstring's 
> life is shorter than the C library's use:
>
> void bar() {
>     string s = ...;
>     auto cstring = s.toStringz;
>     foo(cstring);
>
> } // <- cstring is gone
>
> What if the library saved that pointer while performing foo()?
>
> If cstring is in module-scope or in a container (e.g. an array) 
> that's in module-scope then it's fine. But then, you would have 
> to remove it from that container when the C library does not 
> need that pointer anymore.
>
> Ali

is foo() is being called from a thread, how I am supposed to keep 
cstring "alive"?


More information about the Digitalmars-d-learn mailing list