The hello.d sample programs shows parasite characters when invoked. The problem comes from missing nul terminating character in D strings. The line: printf("args[%d] = '%s'\n", i, cast(char *)args[i]); must be rewritten as: printf("args[%d] = '%.*s'\n", i, args[i]); There is the same error in the unittest.d program in Phobos.
Wrong again. It should be fixed to use writefln, in both the D1 and D2 packages. And probably have args declared as string[] rather than char[][]. ---------- import std.stdio; int main(string[] args) { writefln("hello world"); writefln("args.length = %d", args.length); for (int i = 0; i < args.length; i++) writefln("args[%d] = '%s'", i, args[i]); return 0; } ----------
Walter, these sources don't seem to be part of either the phobos or druntime projects, so they must live along side the compiler itself. Over half of them use printf, and I'll bet that most could stand to be updated in one way or another. This applies to both 1.x and 2.x as well.
I'm seeing this problem in D2.0.48 although I only see the garbage characters on Windows. Is this stuff in version control? I'd be glad to rid all the sample programs of printf...
This seems to have been fixed for a while now (hello.d uses writefln).