void someFunction(string stuff)
{
stuff ~= "\0";
someCFunction(stuff.ptr);
}
That's what toStringz is for, and it'll avoid appending the
'\0' if it can
(e.g. if the code unit one past the end of the string is '\0'
as it is with
string literals).
I actually wasn't sure if it was best to just append the
character or use toStringz, but now that I know it does that I
will always go with that function. I think I was going to ask
that as well, but forgot or something.
Very few C functions will keep the strings around, but if you
think that
there's a possibility that they will, then you'll need to keep
a reference to
the char* that you're passing in. If you're dealing with a
class or struct,
then that's as simple as having a member variable for it, but
if you're
dealing with free functions, that's likely to mean that whoever
is using those
functions is going to have to worry about it. And since string
literals are
part of the program itself, you shouldn't need to worry about
keeping
references to those. They should exist for the duration of the
program.
- Jonathan M Davis
Keeping a private member variable when using a class/struct was
what I was thinking. As for free functions, I was considering
having the reference be a static variable inside the function,
though I'm not sure how often I would need to do that in my port.
The snippets of code I wrote were just to illustrate what I was
talking about. I suppose I could have written a better example
since most(if not all) of the wrapping of C functions are inside
classes/structs. :P
Thanks for all the info though!