.init property for char[] type
Jeremie Pelletier
jeremiep at gmail.com
Tue Sep 22 07:20:35 PDT 2009
Justin Johansson wrote:
> Daniel Keep Wrote:
>
>>> Big difference if you pass char[] variable .ptr to a C function.
>
>> In general, if you pass a string to a C function you should send it
>> through toStringz first. If you don't, you're just begging for segfaults.
>
> Agreed .. fair enough.
>
> Actually I'm more interested in the semantics for default initialized char[].
> Does it have exactly the same semantics as an empty string (in general D or runtime library, Phobos et. al. context)?
It isn't the same semantics:
a null array is {0, null}, while an empty array is {0, &zero} where zero
is of type 'char zero = 0;' since string literals are zero terminated.
Their usage is mostly the same, you can concatenate both of them, append
to both of them, and etc, all giving the same results. Where it makes
a difference is when you need to enforce an invariant that .ptr is not
null. Calling toStringz on either will give the same C string: a pointer
to a zero value.
You have to remember that arrays are reference types; they are perfectly
valid without referenced data. Think of pointers or objects for example,
which are also reference types. Besides, if you initialize character
arrays to "", what do you initialize other arrays to, and other
reference types to? It just wouldn't be consistent.
More information about the Digitalmars-d
mailing list