Bug 4629 – BufferedFile.printf() wants char[] as first argument

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2010-08-11T19:38:00Z
Last change time
2012-04-24T18:29:53Z
Keywords
rejects-valid
Assigned to
andrei
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2010-08-11T19:38:30Z
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);
Comment #1 by andrej.mitrovich — 2010-08-29T18:42:59Z
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);
Comment #2 by lovelydear — 2012-04-21T15:19:12Z
Compiles on 2.059