Hello all,
I am wondering if I have just found a bug in (s)printf…
According to the PickAxe, table “sprintf flag characters”:
================= snip ==================================
0 (zero) all Pad with zeros, not spaces.
================= snip ==================================
so I think this call
irb(main):053:0> sprintf(“%05s”, 123)
=> " 123"
should correctly result in
“00123”
or I am getting something wrong?
thanks,
Peter
__
http://www.rubyrailways.com
----- Original Message -----
From: “Peter S.” [email protected]
To: “ruby-talk ML” [email protected]
Sent: Saturday, November 11, 2006 1:28 PM
Subject: sprintf bug (?)
================= snip ==================================
so I think this call
irb(main):053:0> sprintf(“%05s”, 123)
=> " 123"
should correctly result in
“00123”
sprintf(“%05d”,123) # ‘d’ not ‘s’
=> “00123”
Bernard K. wrote:
irb(main):053:0> sprintf(“%05s”, 123)
=> " 123"
should correctly result in
“00123”
sprintf(“%05d”,123) # ‘d’ not ‘s’
=> “00123”
I know ‘d’ is not ‘s’, it was a bad example. It should have been
irb(main):002:0> sprintf(“%10s”,‘hello’)
=> " hello"
(there are no zeroes…)
Peter
__
http://www.rubyrailways.com
Hi,
In message “Re: sprintf bug (?)”
on Mon, 13 Nov 2006 07:03:44 +0900, Timothy H.
[email protected] writes:
|Possibly you meant “%010s” instead of “%10s”? In any case, I checked the
|output of a C program compiled with gcc on my Powerbook running OS X
|10.8. In this case, the ‘0’ flag adds padding on the left:
This is platform dependent. Linux manpage says:
0 The value should be zero padded. For d, i, o, u, x, X,
a, A, e, E, f, F, g, and G conversions, the converted
value is padded on the left with zeros rather than
blanks. If the 0 and - flags both appear, the 0 flag is
ignored. If a precision is given with a numeric
conversion (d, i, o, u, x, and X), the 0 flag is
ignored. For other conversions, the behavior is
~~~~~~~~~~~~~~~
undefined.
~~~~~~~~~
zero option affects some specifiers. %s is not among them.
matz.
Yukihiro M. wrote:
zero option affects some specifiers. %s is not among them.
Thank, Matz. This made it really clear at last…
Peter
__
http://www.rubyrailways.com
Peter S. wrote:
so I think this call
=> “00123”
Possibly you meant “%010s” instead of “%10s”? In any case, I checked the
output of a C program compiled with gcc on my Powerbook running OS X
10.8. In this case, the ‘0’ flag adds padding on the left:
ruby$ cat testit.c
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%010s", “hello\n”);
return 0;
}
ruby$ ./testit
0000hello
ruby$
----- Original Message -----
From: “Yukihiro M.” [email protected]
To: “ruby-talk ML” [email protected]
Sent: Sunday, November 12, 2006 6:34 PM
Subject: Re: sprintf bug (?)
This is platform dependent. Linux manpage says:
~~~~~~~~~
zero option affects some specifiers. %s is not among them.
matz.
I suggest that the OP asks ruby’s description of sprintf via “ri
sprintf”
… it is essentially as described above
----- Original Message -----
From: “Peter S.” [email protected]
To: “ruby-talk ML” [email protected]
Sent: Sunday, November 12, 2006 4:43 PM
Subject: Re: sprintf bug (?)
so I think this call
I know ‘d’ is not ‘s’, it was a bad example. It should have been
irb(main):002:0> sprintf(“%10s”,‘hello’)
=> " hello"
(there are no zeroes…)
Peter
This is the correct behavior of sprintf for strings