[Issue 4629] BufferedFile.printf() wants char[] as first argument
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Aug 29 18:43:11 PDT 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4629
Andrej Mitrovic <andrej.mitrovich at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |andrej.mitrovich at gmail.com
--- Comment #1 from Andrej Mitrovic <andrej.mitrovich at 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: -------
More information about the Digitalmars-d-bugs
mailing list