string to char conv

Jonathan M Davis newsgroup.d at jmdavisprog.com
Tue Aug 14 01:07:32 UTC 2018


On Monday, August 13, 2018 6:42:02 PM MDT zeus via Digitalmars-d-learn 
wrote:
> On Tuesday, 14 August 2018 at 00:24:53 UTC, Jonathan M Davis
>
> wrote:
> > On Monday, August 13, 2018 6:06:22 PM MDT zeus via
> >
> > Digitalmars-d-learn wrote:
> >> [...]
> >
> > Why are you casting the string to a char*? That's just going to
> > make writeln print out the pointer value. If you want to print
> > out the value of the string, then just pass the string to
> > writeln.
> >
> > - Jonathan M Davis
>
> Needed char* for while (isspace(*testi)) --testi; etc

Why would you be calling C functions for basic stuff like that? Just use
std.ascii.isWhite (or std.uni.isWhite if you want Unicode whitespace) if you
want to check whether a character is whitespace, and there's really no
reason to use pointers with D strings. But if you just want to strip the
whitespace off of the front of a string, then use std.string.stripLeft. e.g.

auto result = str.stripLeft();

Or a more general solution would involve using std.algorithm.searching.find
to find a specific character, or a character which matches a predicate.
stripLeft is basically a more efficient version of

auto result = str.find!(a => !isWhite(a))();

Very little D code is ever going to be doing anything with char* unless it's
calling toStringz on a string to pass it to a C function, because there is
no D equivalent. Using char* loses the length of the string and loses out on
bounds-checking. And since D strings are not zero-terminated, it usually
does not work well at all to operate on a char* as if it were a string.

- Jonathan M Davis





More information about the Digitalmars-d-learn mailing list