D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 2613 - The trivial hello.d sample program fails at execution
Summary: The trivial hello.d sample program fails at execution
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P2 minor
Assignee: No Owner
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-01-24 14:40 UTC by Philippe Berthault
Modified: 2015-06-09 01:21 UTC (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Philippe Berthault 2009-01-24 14:40:25 UTC
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.
Comment 1 Stewart Gordon 2009-01-25 16:25:25 UTC
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;
}
----------
Comment 2 Brad Roberts 2009-01-25 16:58:36 UTC
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.
Comment 3 AdamB 2010-08-31 21:25:57 UTC
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...
Comment 4 Vladimir Panteleev 2011-08-24 13:30:36 UTC
This seems to have been fixed for a while now (hello.d uses writefln).