免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4036 | 回复: 8
打印 上一主题 下一主题

请教C语言的atof的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-22 18:09 |只看该作者 |倒序浏览
一个变量
char aczValue[99+1];

在fun1内定义,未做过初始化,
在fun2内作为一个输出参数,
fun2( *,*, char *aczValue)
{
    memcpy( aczValue, ptr, 7 );
}

在fun1内得到这个输出的aczValue后,
做了一个atof的转换,
dbl1 = (double) atof( aczValue );

请问:
这个dbl1是否会变成不是7位的东西? 谢谢。
比如,aczValue前面7位是1234567,
dbl1是否可能会变成12345670的东西。

论坛徽章:
0
2 [报告]
发表于 2009-11-22 19:30 |只看该作者
首先保证传给atof的参数满足合法,比如是否以'\0'结束的字符串,是否在double的可转换范围内,等等

论坛徽章:
0
3 [报告]
发表于 2009-11-22 19:32 |只看该作者
原帖由 jtu 于 2009-11-22 19:30 发表
首先保证传给atof的参数满足合法,比如是否以'\0'结束的字符串,是否在double的可转换范围内,等等

字符串没有做过初始化,拷贝进来的是1234567,没有带结束符的,
是否atof会出现不可预料的后果?

论坛徽章:
0
4 [报告]
发表于 2009-11-22 19:39 |只看该作者
原帖由 bluesgone 于 2009-11-22 19:32 发表

字符串没有做过初始化,拷贝进来的是1234567,没有带结束符的,
是否atof会出现不可预料的后果?

不可预料,你是对的

论坛徽章:
0
5 [报告]
发表于 2009-11-22 19:57 |只看该作者
原帖由 jtu 于 2009-11-22 19:39 发表

不可预料,你是对的

但是我始终无法弄清楚的是,
在一个生产环境下跑,总是将1000000(百万),
在做atof的时候转成了10000000(千万),多了一个0,
百万以下的却没有出问题。

在开发环境中,却没出现这个问题,真的很费解哦。
临时变量第八位驻留一个0,这个问题有没有高手帮忙解释?谢谢

[ 本帖最后由 bluesgone 于 2009-11-24 15:06 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-11-24 15:07 |只看该作者

回复 #5 bluesgone 的帖子

临时变量第八位驻留一个0,这个问题有没有高手帮忙解释?谢谢

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
7 [报告]
发表于 2009-11-29 21:23 |只看该作者
原帖由 bluesgone 于 2009-11-22 19:57 发表

但是我始终无法弄清楚的是,
在一个生产环境下跑,总是将1000000(百万),
在做atof的时候转成了10000000(千万),多了一个0,
百万以下的却没有出问题。

在开发环境中,却没出现这个问题,真的很费解 ...

不是atof的错,是你的错!
你的错误在于不应该使用memcpy,使用strcpy就不会错!

论坛徽章:
0
8 [报告]
发表于 2009-11-29 21:27 |只看该作者
char aczValue[99+1];
atof可没有这么智能

论坛徽章:
0
9 [报告]
发表于 2009-11-30 08:31 |只看该作者
原帖由 bluesgone 于 2009-11-24 15:07 发表
临时变量第八位驻留一个0,这个问题有没有高手帮忙解释?谢谢


这个没什么好解释的,没有初始化的内存,里面是什么值都有可能,每次都恰好出现相同值也是有可能的,出现不同的值也是有可能的,
自己加个'\0'就什么都解决了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP