sprintf bug (?)

P

Peter Szinek

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
 
J

Joel VanderWerf

Peter said:
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?

I think ruby follows the C standard, which says zero padding only
applies to numeric formats.
 
B

Bernard Kenik

----- Original Message -----
From: "Peter Szinek" <[email protected]>
To: "ruby-talk ML" <[email protected]>
Sent: Saturday, November 11, 2006 1:28 PM
Subject: sprintf bug (?)

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"
sprintf("%05d",123) # 'd' not 's'
=> "00123"
 
T

Timothy Hunter

Peter said:
:) 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

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$
 
Y

Yukihiro Matsumoto

Hi,

In message "Re: sprintf bug (?)"

|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.
 
B

Bernard Kenik

----- Original Message -----
From: "Peter Szinek" <[email protected]>
To: "ruby-talk ML" <[email protected]>
Sent: Sunday, November 12, 2006 4:43 PM
Subject: Re: sprintf bug (?)

:) 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
 
B

Bernard Kenik

----- Original Message -----
From: "Yukihiro Matsumoto" <[email protected]>
To: "ruby-talk ML" <[email protected]>
Sent: Sunday, November 12, 2006 6:34 PM
Subject: Re: sprintf bug (?)

Hi,

In message "Re: sprintf bug (?)"
on Mon, 13 Nov 2006 07:03:44 +0900, Timothy Hunter

|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.
I suggest that the OP asks ruby's description of sprintf via "ri sprintf"
... it is essentially as described above
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Sprintf bug 8
sprintf bug? 1
Bug in sprintf? 23
Bug in ruby printf/sprintf 4
sprintf 15
sprintf bug in 1.9.0? 5
sprintf >> atof question 5
sprintf behavies different than printf 7

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top