On Tuesday, 21 January 2025 at 09:34:29 UTC, DLearner wrote:
On Tuesday, 21 January 2025 at 05:54:48 UTC, evilrat wrote:
On Monday, 20 January 2025 at 22:32:02 UTC, DLearner wrote:
It was because my understanding was that in certain
situations the string construct did not just produce a
character array - it also produced the (to me horrible)
concept of adding a x'00' immediately after the last
character of the array.
This is only for compile-time known strings (aka literals) for
easy C interop, if you make strings at runtime they won't have
null terminator as a granted.
Suppose we have:
```
string str1 = "A" ~ "B";
```
Does that produce:
str1 == x'41' x'42' x'00' or
== x'41' x'00' x'42' x'00' or
== x'41' x'00' x'42' x'00' x'00'?
And is str1.length == 2 or
== 3 or
== 4?
In this example it definitely should be length == 2, if it is not
then it is a bug.
It should only add null terminator AFTER the end of complete
string, but it is technically not a part of that string.
You know, accessing slice memory beyond its length is unsafe, you
should really never do this unless you are 100% know what exactly
are you doing.
Look, here is why it does that - in C it is basically a
convention that all strings is null terminated because this is
how standard library works and so everyone else has to follow.
D gives you a favor by doing this automatically without the need
of putting `string greeting = "hello\0"` or `"hello " ~ "world" ~
'\0'` everywhere in your code.
I hope this is now simple enough to understand.