http://d.puremagic.com/issues/show_bug.cgi?id=4629
Andrej Mitrovic <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #1 from Andrej Mitrovic <[email protected]> 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: -------
