On Wednesday, 1 May 2013 at 03:54:23 UTC, Tim Keating wrote:
Not sure whether this is a bug, or perhaps I'm misunderstanding
something, but it seems like this should work:
void main()
{
char[][] outBuf;
auto f = File("testData.txt", "r");
char[] buf;
writeln("\n**** RAW OUTPUT *****");
while (f.readln(buf))
{
write(buf);
outBuf ~= buf;
}
writeln("\n**** BUFFERED OUTPUT *****");
foreach (line; outBuf)
{
write(line);
}
}
testData.txt is just a couple of lines of miscellaneous text.
The expectation is that the raw output and the buffered output
should be exactly the same... but they are not. (If anyone
would like to see this for themselves, I stuck it in github:
https://github.com/MrTact/CharBug.)
Changing the types of outBuf and buf to dchar works as
expected. Changing outBuf to a string[] and appending buf.idup
does as well.
Just outBuf ~= buf.dup; works, too. Without .dup you're
overwriting and appending the same chunk of memory again and
again.
From the documentation on File.readln
(<http://dlang.org/phobos/std_stdio#readln>): "Note that reusing
the buffer means that the previous contents of it has to be
copied if needed."
I'm a bit puzzled as for why it behaves differently with dchar.