From Bugzilla Helper: User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040120 Description of problem: #include <stdlib.h> main() { printf ("%f\n", strtof ("+5.7344E+02", 0)); return 0; } erroneously prints: 0.000000 and worse, #include <stdlib.h> main() { char foo; printf ("%f\n", strtof ("+5.7344E+02", 0)); return 0; } prints: 245504.625029 Version-Release number of selected component (if applicable): glibc-2.2.4-26 How reproducible: Always Steps to Reproduce: compile above Additional info: No rpms have been updated; this bug is also present in more modern glibcs.
If you used -Wall option, GCC would tell you what's wrong: /tmp/x.c:3: warning: return type defaults to `int' /tmp/x.c: In function `main': /tmp/x.c:4: warning: implicit declaration of function `printf' /tmp/x.c:4: warning: implicit declaration of function `strtof' /tmp/x.c:4: warning: double format, different type arg (arg 2) The problem is that strtof, being ISO C99+ function, is not prototyped in ISO C90 compilations, as that would violate namespace rules. See info libc on Feature Set Macros. Compiling with -std=c99, -std=gnu99, -D_GNU_SOURCE or -D_ISOC99_SOURCE (and also #include <stdio.h> for printf while you're at it) will fix it up.