digitalmars.D.bugs - crash D1 compiler
- Zorran (9/9) Feb 01 2009 This code crash D1 compiler (v1.039)
- Extrawurst (10/21) Feb 01 2009 do u mean it actually crashes dmd at compile time or do u mean your
- Simen Kjaeraas (9/18) Feb 01 2009 Indeed it does. Now of course, ss + "\0" makes no sense, but the compile...
- Don (2/31) Feb 01 2009 I've added this as bug #2637
This code crash D1 compiler (v1.039) ============ import std.stdio; void main() { string ss="sample"; printf("%s", cast(char*)(ss+"\0") ); } ===========
Feb 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()")
Feb 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
Feb 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
Feb 01 2009