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

Reply via email to