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









Extrawurst <spam extrawurst.org> 