由于基础太差,每次编程都碰到各种稀奇古怪的,莫名其妙的错误,前两天就连atoi,atof等我一直以为可以信手拈来的函数也出来了问题,虽然解决了,可是不知道为什么?
问题:在一个小程序里面,没有#include <stdlib.h>,运行atoi函数时没有编译错误,也没有运行时的错误,一切都很理想,可是atof函数就不一样了,编译没有出错,貌似连报警也没有啊,可是编译出来的结果是错的,可是加上stdlib库就可以了,奇怪
atoi atof
atoi函数是先将string转化为int类型,顾名思义,atof就是将string转化为float类型,废话不多说,看程序
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char *ss = "13.62";
float north_value=0.0;
north_value = atof(ss);
printf( "north_value========%f\n",north_value);
return 0;
}
#include <stdio.h>
int main( void )
{
char *ss = "13.62";
float north_value=0.0;
north_value = atof(ss);
printf( "north_value========%f\n",north_value);
return 0;
}
north_value========13.620000
输出符合float类型带6位小数点的规定
再看不带stdlib库的情况
//#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char *ss = "13.62";
float north_value=0.0;
north_value = atof(ss);
printf( "north_value========%f\n",north_value);
return 0;
}
#include <stdio.h>
int main( void )
{
char *ss = "13.62";
float north_value=0.0;
north_value = atof(ss);
printf( "north_value========%f\n",north_value);
return 0;
}
没有任何编译出错,报警也没有,输出为:
north_value========1546188288.000000
乱七八糟
可是对于atoi,并不这样
//#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char *ss = "13";
int north_value=0;
north_value = atoi(ss);
printf( "north_value========%d\n",north_value);
return 0;
}
#include <stdio.h>
int main( void )
{
char *ss = "13";
int north_value=0;
north_value = atoi(ss);
printf( "north_value========%d\n",north_value);
return 0;
}
north_value========13
很奇怪呵。。。。。
去看了一下
stdlib
介绍如下:
stdlib.h里面定义了五种类型、一些宏和通用工具函数。
类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;
宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等;常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、 srand()、exit()等等。
转载于:https://blog.51cto.com/nnssll/195229