SQLite 3.6.23.1 wrapper + connector

Pelle pelle.mansson at gmail.com
Thu Jul 22 05:55:40 PDT 2010


On 07/20/2010 02:23 PM, awishformore wrote:
> When thinking about it, it makes sense to have string literals null
> terminated in order to have C functions work with them. However, I
> wonder about some stuff, for instance:
>
> string s = "string";
> // is s == "string\0" now?

No, but the byte after the string (in the executable) is 0.

> char[] c = cast(char[])s;
> // is c[6] == '\0' now?

No, c.length == 6.

> char* p = s.ptr;
> // is *(p+6) == '\0' now?

Yes. Since it came from a literal.

>
> I think use of the zero terminator should be consistent. Either make
> every string (and char[] for that matter) zero terminated in the
> underlying memory for backwards compatibility with C or leave it to the
> user in all cases.
>
> /Max

The current situation allows for this:
printf("Hello!\n");

but not this:

string s = "Hello!\n";
printf(s);

Since the compiler knows about literals being null terminated, but not 
just any string. I think it's a good compromise.


More information about the Digitalmars-d-announce mailing list