当我不包含stdlib.h的时候使用atof()函数不报错,可以运行,但是得到的是错误的结果
(visual studio2015)
#include <stdio.h>
#include <string.h>
void main()
{
char *a = "-100.23";
float m = atof(a);
printf("a = %.3f\n",m );
}
运行结果为a=0.000
但是用atoi()的时候就好像没问题
#include <stdio.h>
#include <string.h>
void main()
{
char *a = "-100.23";
int m = atoi(a);
printf("a = %d\n",m );
}
运行结果为运行结果为a=-100。
包含了stdlib.h后就都是对的。
请问这是为什么?是因为#include #include 这两个包含文件间接地包含了这两个函数的声明吗,如果是这样的话为什么atof()不对而atoi()是对的呢?如果不是这样那是什么原因呢?
很有意思的一个问题!
首先强调一下,如果要正确使用atof和atoi函数,请包含stdlib.h头文件。
如何解释题目中描述的情况?我找到下面这个链接:
https://bytes.com/topic/c/answers/222065-whats-wrong-atof-casting
文章不用全看完,里面Jack Klein的回复很好的解释了原因。
本来想翻译过来,水平有限,原文更清楚准确。