Am Fri, 24 Apr 2015 18:02:57 +0000 schrieb "AndyC" <a...@squeakycode.net>:
> On Friday, 24 April 2015 at 17:56:59 UTC, tcak wrote: > > On Friday, 24 April 2015 at 17:50:03 UTC, AndyC wrote: > >> Hi All, I cannot seem to understand whats wrong with this: > >> > >> // main.d > >> import std.stdio; > >> import std.digest.md; > >> import std.file; > >> > >> > >> string md5sum(const string fname) > >> { > >> MD5 hash; > >> > >> File f = File(fname, "rb"); > >> foreach( ubyte[] buf; f.byChunk(4096)) > >> { > >> hash.put(buf); > >> } > >> > >> string s = toHexString!(LetterCase.lower)(hash.finish()); > >> writeln(s); //This is correct > >> return s; > >> } > >> > >> void main() > >> { > >> string crc = md5sum("main.d"); > >> writeln(crc); //This is garbage > >> } > >> > >> > >> The writeln in md5sum prints correctly, but the "return s" > >> seems to mess it up? What's going on? > >> > >> Thanks for you time, > >> > >> -Andy > > > > Just do that "return s.dup()". Then it works for me. That's > > probably due to the fact that s is in stack. But I am not sure > > how "toHexString" works. > > > Ah, yep, that works. I'd originally written it as: > return toHexString!(LetterCase.lower)(hash.finish()); > > Which doesn't work, so used the temp string to test it. > > Now I'm using: > return toHexString!(LetterCase.lower)(hash.finish()).dup(); > > Kinda weird. But works. Thank you! > > -Andy https://issues.dlang.org/show_bug.cgi?id=9279 toHexstring doesn't return a string, it returns char[n], a fixed-size array of length n. It shouldn't implicitly convert to a string.