Jonathan M Davis wrote:
On Monday, October 01, 2012 11:18:16 Piotr Szturmaj wrote:
Adam D. Ruppe wrote:
On Saturday, 29 September 2012 at 02:11:12 UTC, Alex Rønne Petersen wrote:
While the idea is reasonable, the problem then becomes that if you
accidentally pass a non-zero terminated char* to %sz, all hell breaks
loose just like with printf.

That's the same risk with to!string(), yes? We aren't really losing
anything by adding it.

Also this reminds me of the utter uselessness of the current behavior of
"%s" and a pointer - it prints the address.

Why not specialize current "%s" for character pointer types so it will
print null terminated strings? It's always possible to cast to void* to
print an address.

Honestly? One of Phobos' best features is the fact that %s works for
_everything_. Specializing it for _anything_ would be horrible. It would also
break a _ton_ of code. Who even uses %d, %f, etc. if they don't need to use
format specifiers? It's just way simpler to always use %s.

OK, I think you're right.

I'm not completely against the idea of %zs, but I confess that I have to
wonder what someone is doing if they really need to print zero-terminated
strings all that often in D for anything other than quick debugging (in which
case to!string works just fine), since only stuff directly interacting with C
code will even care. And if it's really that big a deal, and you're constantly
interacting with C code like that, you can always use the appropriate C
function - printf - and then it's a non-issue.

Imagine you're serializing great amount of text when some of the text come from a C library (as null-terminated char*) and you're using format() with %s specifiers. Direct handling of C strings would be just faster because it avoids double iteration.

Reply via email to