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