std.digest toHexString

Carl Sturtivant via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Mar 16 10:39:03 PDT 2017


On Thursday, 16 March 2017 at 17:20:45 UTC, H. S. Teoh wrote:
> I'm not convinced casting static array to immutable is OK. 
> Check this out:
>
> 	import std.stdio;
>
> 	char[32] func() {
> 	    char[32] staticArr = "A123456789abcdefB123456789abcdef";
> 	    return staticArr; // OK, by-value return
> 	}
>
> 	string gunk() {
> 	    string x = func(); // implicit conversion char[32] -> 
> string
> 	    writeln(x.ptr);
> 	    writeln(x);		// prints "A123456789abcdefB123456789abcdef"
> 	    return x;
> 	}
>
> 	void main() {
> 	    auto s = gunk();
> 	    writeln(s.ptr);	// prints same address as in gunk()
> 	    writeln(s);		// prints corrupted string
> 	}
>
> Run this code and you'll see that s.ptr has the same address as 
> x.ptr, and that x.ptr is the address of a local variable. This 
> is blatantly wrong.
>
> Filed a new issue for this:
>
> 	https://issues.dlang.org/show_bug.cgi?id=17261

Exactly, if there was a variable of type char[32] on the right 
hand side of
     string x = func();
instead of the call of func, then the compiler would complain. So 
this is a bug.





More information about the Digitalmars-d-learn mailing list