printf, writeln, writefln
Ali Çehreli
acehreli at yahoo.com
Wed Dec 7 16:18:33 UTC 2022
On 12/6/22 15:07, johannes wrote:
> 'write' prints out the address
> of the first byte. This is odd to me because printf does the job
> correctly.
printf behaves as what you expect because %s means dereferencing the
pointer values and printing the char contents until printf sees '\0'.
> But I think to understand that write in D interpretes char*
> as a pointer to a byte.
Because it is. :) char* is nothing but a pointer to char. ('byte' exists
as well, so I user 'char'.)
> it seems the
> formatting "%s" has another meaning in D ?
Yes. %s means the string representation of the variable. Sring
representation of a pointer happens to be the hexadecimal representation
of its value.
User-defined types can define a toSring() member function to decide how
their string representation should be.
%s is the default: write(x) or writeln(x) would print like %s would.
This all works because these functions are templates, taking advantage
of type deduction: They know the exact type of what they are printing.
So, %s is known for that type.
printf that came from C is not templatized, so the programmer has to
tell it what to do like with %s.
Ali
More information about the Digitalmars-d-learn
mailing list