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”

or I am getting something wrong?

thanks,
Peter

__
http://www.rubyrailways.com

Peter S. wrote:

================= snip ==================================
or I am getting something wrong?
I think ruby follows the C standard, which says zero padding only
applies to numeric formats.

----- 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”

:slight_smile: 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

:slight_smile: 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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs