Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 May 2002 09:28:12 +1200
From:      Jonathan Chen <jonc@chen.org.nz>
Cc:        "Terry R. Friedrichsen" <terry@uplift.sunquest.com>, questions@FreeBSD.ORG
Subject:   Re: printf(3) problem?
Message-ID:  <20020518092812.B85520@grimoire.chen.org.nz>
In-Reply-To: <20020518091648.A85520@grimoire.chen.org.nz>; from jonc@chen.org.nz on Sat, May 18, 2002 at 09:16:48AM %2B1200
References:  <200205171038.DAA52246@uplift.sunquest.com> <20020518091648.A85520@grimoire.chen.org.nz>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, May 18, 2002 at 09:16:48AM +1200, Jonathan Chen wrote:
> On Fri, May 17, 2002 at 03:38:18AM -0700, Terry R. Friedrichsen wrote:
> > 
> > 
> > I've never tried this before, so I may simply be doing it wrong.  I'm using
> > FreeBSD 4.5-RELEASE, and the following program appears to print the wrong
> > thing.  I'm somewhat buoyed by the fact that Tru64 and Linux agree with me.
> > 
> > My belief is that the correct output of this program should be:
> > 
> > p1,p2 = 00000000000000012345,00000000000000067890
> > 
> > but FreeBSD prints instead:
> > 
> > p1,p2 = 00000000000000012345,20
> > 
> > Have I missed something here?
> > 
> 
> I happen to agree with you; you may want to sendpr(1) your
> observations.

Sigh. On a second review, the problem here is that you're supplying
an "int" sized value when the format string expects a "long" sized
value. ie: if you change the type of p1 and p2 to

	unsigned long p1, p2;

you'll find that the results come out as expected. ie the behaviour of
printf(3) is correct, after all.

Cheers.
-- 
Jonathan Chen <jonc@chen.org.nz>
----------------------------------------------------------------------
                        "Only the meek get pinched. The bold survive."
                                                      - Ferris Bueller

> > --------------------------------------cut here---------------------------
> > #include <stdio.h>
> > #include <stdlib.h>
> > 
> > #include <sys/types.h>
> > 
> > #define ULONG_LEN   (size_t)20
> > 
> > 
> > 
> > main()
> > 
> > {
> >   off_t p1, p2;
> > 
> >   p1 = 12345; p2 = 67890;
> > 
> >   printf("p1,p2 = %0*lu,%0*lu\n", ULONG_LEN, p1, ULONG_LEN, p2);
> > 
> >   exit(0);
> > }

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020518092812.B85520>