首页 > 其他 > 详细

防止atoi函数内存越界

时间:2016-01-11 18:23:17      阅读:489      评论:0      收藏:0      [点我收藏+]

函数形式为: int atoi(const char *nptr);

    函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。
所以在使用时一不小心会造成内存越界,如以下代码:

#include<stdio.h>

int main()
{
char a=‘7‘;
char b=‘2‘;

printf("a=%d,b=%d\n",atoi(&a),atoi(&b));
return 0;
}

输出结果:

a=7,b=27

修改代码如下:

#include<stdio.h>

int main()
{
char a=‘7‘;
char b=‘2‘;

printf("a=%d,b=%d\n",atoi(&a),atoi(&b));
printf("a=%p,b=%p\n",&a,&b);
return 0;
}

输出结果:

a=7,b=27

a=0x7fff85cd714f,b=0x7fff85cd714e

由此可见,atoi()在转换b时第一个去的自符2,之后去的自符7,所以atoi(&b)输出结果27,所以在实际使用中如果不能确定内存数据排列情况尽量不要用atoi(),最好自己写个转换函数。

防止atoi函数内存越界

原文:http://www.cnblogs.com/wangliangblog/p/5121955.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!