atof() is returning ambiguous value

2020-04-08 14:06发布

I am trying to convert a character array into double in c using atof and receiving ambiguous output.

printf("%lf\n",atof("5"));

prints

262144.000000

I am stunned. Can somebody explain me where am I going wrong?

标签: c atof
2条回答
Juvenile、少年°
2楼-- · 2020-04-08 14:49

Make sure you have included the headers for both atof and printf. Without prototypes the compiler will assume they return int values. When that happens the results are undefined, since that doesn't match atof's actual return type of double.

#include <stdio.h>
#include <stdlib.h>

No prototypes

$ cat test.c
int main(void)
{
    printf("%lf\n", atof("5"));
    return 0;
}

$ gcc -Wall -o test test.c
test.c: In function ‘main’:
test.c:3:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
test.c:3:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
test.c:3:5: warning: implicit declaration of function ‘atof’ [-Wimplicit-function-declaration]
test.c:3:5: warning: format ‘%lf’ expects argument of type ‘double’, but argument 2 has type ‘int’ [-Wformat]

$ ./test
0.000000

Prototypes

$ cat test.c
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("%lf\n", atof("5"));
    return 0;
}

$ gcc -Wall -o test test.c

$ ./test
5.000000

Lesson: Pay attention to your compiler's warnings.

查看更多
狗以群分
3楼-- · 2020-04-08 14:52

I fixed a similar problem by having a decimal point and at least 2 zeros after the decimal point with

printf("%lf\n",atof("5.00"));
查看更多
登录 后发表回答