Thread overview
crash D1 compiler
Feb 01, 2009
Zorran
Feb 01, 2009
Extrawurst
Feb 01, 2009
Simen Kjaeraas
Feb 01, 2009
Don
February 01, 2009
This code crash D1 compiler (v1.039)

============
import std.stdio;

void main()
{
	string ss="sample";
	printf("%s", cast(char*)(ss+"\0") );
}
===========
February 01, 2009
Zorran wrote:
> This code crash D1 compiler (v1.039)
> 
> ============
> import std.stdio;
> 
> void main()
> {
> 	string ss="sample";
> 	printf("%s", cast(char*)(ss+"\0") );
> }
> ===========

do u mean it actually crashes dmd at compile time or do u mean your application carshes at runtime?

try:

void foo(char[] ss)
{
    printf("my string is: %.*s\n", ss);
}

documented under: http://www.digitalmars.com/d/2.0/interfaceToC.html ("Calling printf()")
February 01, 2009
On Sun, 01 Feb 2009 13:01:09 +0100, Zorran <zorran@tut.by> wrote:

> This code crash D1 compiler (v1.039)
>
> ============
> import std.stdio;
>
> void main()
> {
> 	string ss="sample";
> 	printf("%s", cast(char*)(ss+"\0") );
> }
> ===========

Indeed it does. Now of course, ss + "\0" makes no sense, but the compiler still should not crash.

To correctly concatenate two strings, use the ~ operator. Also, to convert a D string to a C string (char *), use toStringz, which automagically adds the terminating null. Your program would then look like this:

void main() {
	string ss = "sample";
	printf("%s", toStringz(ss));
}

--
Simen
February 01, 2009
Simen Kjaeraas wrote:
> On Sun, 01 Feb 2009 13:01:09 +0100, Zorran <zorran@tut.by> wrote:
> 
>> This code crash D1 compiler (v1.039)
>>
>> ============
>> import std.stdio;
>>
>> void main()
>> {
>>     string ss="sample";
>>     printf("%s", cast(char*)(ss+"\0") );
>> }
>> ===========
> 
> Indeed it does. Now of course, ss + "\0" makes no sense, but the compiler still should not crash.
> 
> To correctly concatenate two strings, use the ~ operator. Also, to convert a D string to a C string (char *), use toStringz, which automagically adds the terminating null. Your program would then look like this:
> 
> void main() {
>     string ss = "sample";
>     printf("%s", toStringz(ss));
> }
> 
> -- 
> Simen
I've added this as bug #2637