Re: libc/printf bug



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's
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]$

How would you print a float in hex? I think print will convert it to integer, and that is 0.
`%x', `%X'
Print an integer as an unsigned hexadecimal number. `%x' uses
lower-case letters and `%X' uses upper-case. *Note Integer
Conversions::, for details.
So seems printf gets confused because you present it with a float when i t wants an integer.
This behavior I have seen in other cases where wrong or missing arguments were presented too.
Maybe it has to do with stack space where the vars are when the function is called?

.



Relevant Pages

  • Re: libc/printf bug
    ... Am I missing ... that printf is mangling the address unless the second argument ... I don't see that the cast should have any effect at all ... When passed to a function with variable arguments, float arguments are ...
    (comp.os.linux.development.apps)
  • Re: libc/printf bug
    ... or the author is blind as a bat. ... Am I missing ... I don't see that the cast should have any effect at all ... How would you print a float in hex? ...
    (comp.os.linux.development.apps)
  • Re: problem incrementing my variable
    ... Isn't that taken care of by default argument promotion? ... just before calling printf, for example. ... default argument promotions, from float to double, which matches the ... If he's told it to expect a double by using %f, then he can give a double, or a float, or something cast to a double, or something cast to a float, or any other expression which results in a float or a double. ...
    (comp.lang.c)
  • Re: Comparission cause problem
    ... > I think I may be missing some points thats why, I have some doubts on the ... that is wider than a float. ... In simple terms the natural floating point type for C and C++ is double ...
    (alt.comp.lang.learn.c-cpp)
  • Re: openning a file
    ... 37 float **Allocate2DFloat(int rows, int columns) ... Missing semicolon ';' at the end. ... ReadClassFiletest.c:40: error: syntax error before '{' token ...
    (comp.lang.c)