Re: string to char* in betterC

2020-03-11 Thread 9il via Digitalmars-d-learn

On Wednesday, 11 March 2020 at 16:10:48 UTC, 9il wrote:

On Wednesday, 11 March 2020 at 16:07:06 UTC, Abby wrote:
What is the proper way to get char* from string which is used 
in c functions? toStringz does returns:


/usr/include/dmd/phobos/std/array.d(965,49): Error: TypeInfo 
cannot be used with -betterC


and I think string.ptr is not safe because it's not zero 
termined. So what should I do? realloc each string with /0?


Thank you for your help


3. You can use mir-algorithm for simplicity and speed


/+dub.sdl:
dependency "mir-algorithm" version="~>3.7.18"
+/
import mir.format;
import core.stdc.stdio;

void main() {
printf("some_string %s", (stringBuf() << "other_string" << 
"\0" << getData).ptr);

}


stringBuf() uses stack if the inner string fits into it. So, It 
is a mutch master than malloc/free. However, in this case C 
function should return pointer ownership to the caller.


Re: string to char* in betterC

2020-03-11 Thread rikki cattermole via Digitalmars-d-learn

On 12/03/2020 5:07 AM, Abby wrote:
What is the proper way to get char* from string which is used in c 
functions? toStringz does returns:


/usr/include/dmd/phobos/std/array.d(965,49): Error: TypeInfo cannot be 
used with -betterC


and I think string.ptr is not safe because it's not zero termined. So 
what should I do? realloc each string with /0?


Thank you for your help


String literals are null terminated so you can pass them straight to C.

toStringz will of course not work as that relies on the GC.


Re: string to char* in betterC

2020-03-11 Thread 9il via Digitalmars-d-learn

On Wednesday, 11 March 2020 at 16:07:06 UTC, Abby wrote:
What is the proper way to get char* from string which is used 
in c functions? toStringz does returns:


/usr/include/dmd/phobos/std/array.d(965,49): Error: TypeInfo 
cannot be used with -betterC


and I think string.ptr is not safe because it's not zero 
termined. So what should I do? realloc each string with /0?


Thank you for your help


1. Yes.
2. A compile-time known or constants always contain trailing zero.

static immutable "some text"; // contains \0 after the data.



string to char* in betterC

2020-03-11 Thread Abby via Digitalmars-d-learn
What is the proper way to get char* from string which is used in 
c functions? toStringz does returns:


/usr/include/dmd/phobos/std/array.d(965,49): Error: TypeInfo 
cannot be used with -betterC


and I think string.ptr is not safe because it's not zero 
termined. So what should I do? realloc each string with /0?


Thank you for your help