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

2012-04-24 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=4629


bearophile_h...@eml.cc changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution||FIXED


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


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

2012-04-21 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=4629


SomeDude lovelyd...@mailmetrash.com changed:

   What|Removed |Added

 CC||lovelyd...@mailmetrash.com


--- Comment #2 from SomeDude lovelyd...@mailmetrash.com 2012-04-21 15:19:12 
PDT ---
Compiles on 2.059

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


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

2011-01-09 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=4629


Andrei Alexandrescu and...@metalanguage.com changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
 CC||and...@metalanguage.com
 AssignedTo|nob...@puremagic.com|and...@metalanguage.com


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


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

2010-08-30 Thread d-bugmail
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: ---