On Fri, Apr 02, 2021 at 04:32:53AM +0000, mw via Digitalmars-d-learn wrote:
[...]
> ---
> import std;
> import std.conv : text;
> 
> 
> void main()
> {
>     char[6] s;
>     s = "abc";
>     writeln(s, s.length);  // abc6, ok it's the static array's length
> 
>     string t = text("head-", s, "-tail");
>     writeln(t, t.length);  // head-abc-tail16, why?
> }
> ---
> 
> Why the last output is 16 instead of 13, t's type is string here.

Because `s` contains 6 chars, and you only assigned 3 of them, so there
are 3 trailing null bytes that are inserted before "-tail". Null bytes
don't print anything, so you don't see them when printed as a string,
but if you cast it to ubyte[], you will see them:

        writefln("%(%02X %)", t);
        // Prints: 68 65 61 64 2D 61 62 63 00 00 00 2D 74 61 69 6C

Remember, this is D, not C. Strings are not terminated by nulls, so
appending the static array will append all 6 chars, including the nulls.


T

-- 
Holding a grudge is like drinking poison and hoping the other person dies. -- 
seen on the 'Net
              • ... H. S. Teoh via Digitalmars-d-learn
              • ... mw via Digitalmars-d-learn
              • ... Paul Backus via Digitalmars-d-learn
          • Re: w... Computermatronic via Digitalmars-d-learn
            • ... mw via Digitalmars-d-learn
              • ... Computermatronic via Digitalmars-d-learn
              • ... rikki cattermole via Digitalmars-d-learn
              • ... mw via Digitalmars-d-learn
              • ... Berni44 via Digitalmars-d-learn
      • Re: what exac... mw via Digitalmars-d-learn
  • Re: what exactly is st... H. S. Teoh via Digitalmars-d-learn
  • Re: what exactly is st... Виталий Фадеев via Digitalmars-d-learn

Reply via email to