http://d.puremagic.com/issues/show_bug.cgi?id=4629
Andrej Mitrovic andrej.mitrov...@gmail.com changed:
What|Removed |Added
CC||andrej.mitrov...@gmail.com
--- Comment #1 from Andrej Mitrovic andrej.mitrov...@gmail.com 2010-08-29
18:42:59 PDT ---
Casting a string literal to a char[] is esentially undefined behavior. If you
need a char[] out of a string literal, use .dup:
import std.stream: BufferedFile, FileMode;
void main()
{
auto f = new BufferedFile(testfile.t, FileMode.Out);
f.printf(%d\n.dup, 10);
f.close();
}
I'm guessing printf takes a char[] due to it's C heritage? So far I've seen a
lot of D1 code that uses char[] and when porting it to D2 one needs to either
change all declarations/arguments to use a string, or at the very least use
.dup when passing string literals to functions taking char[].
(In reply to comment #0)
Using dmd 2.048 on this code:
import std.stream: BufferedFile, FileMode;
void main() {
auto f = new BufferedFile(testfile.t, FileMode.Out);
f.printf(%d\n, 10);
f.close();
}
It shows the errors:
test.d(4): Error: function std.stream.Stream.printf (char[] format,...) is not
callable using argument types (string,int)
test.d(4): Error: cannot implicitly convert expression (%d\x0a) of type
string to char[]
This gives no errors:
f.printf(cast(char[])%d\n, 10);
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---