Re: libc/printf bug
- From: Micah Cowan <micah@xxxxxxxxxx>
- Date: Mon, 27 Feb 2006 23:55:20 GMT
Jan Panteltje <pNaonStpealmtje@xxxxxxxxx> writes:
On a sunny day (27 Feb 2006 12:09:54 -0800) it happened "bill pursell"
<bill.pursell@xxxxxxxxx> wrote in
<1141070994.179527.261050@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>:
The following code exhibits unexpected behavior. Either it'sHow would you print a float in hex?
a bug in libc, or the author (me) is blind as a bat. Am I missing
something here, or is something horribly wrong? It appears
that printf is mangling the address unless the second argument
gets cast. I don't see that the cast should have any effect at all
on the output. Any thoughts?
[tmp]$ cat printf_bug.c
int
main()
{
float a=0;
printf("%p\n", &a);
printf("%x %p\n", a, &a);
printf("%x %p\n", (int)a, &a);
}
[tmp]$ ./a.out
0xfefb6764
0 (nil)
0 0xfefb6764
[tmp]$
Actually, floating point types now have a hexadecimal
representation. See if your system/C-implementation has the "a" and
"A" conversion specifiers.
I think print will convert it to integer, and that is 0.
It will not: variadic functions are "dumb" about what you're passing
it. You have to explicitly cast.
.
- Follow-Ups:
- Re: libc/printf bug
- From: Jan Panteltje
- Re: libc/printf bug
- References:
- libc/printf bug
- From: bill pursell
- Re: libc/printf bug
- From: Jan Panteltje
- libc/printf bug
- Prev by Date: Re: libc/printf bug
- Next by Date: Re: libc/printf bug
- Previous by thread: Re: libc/printf bug
- Next by thread: Re: libc/printf bug
- Index(es):
Relevant Pages
|
|