0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用printf函数的安全隐患

我快闭嘴 来源:C语言学习联盟 作者:C语言学习联盟 2022-10-09 09:49 次阅读

程序员都知道,也都会使用printf函数,但你知道它也有“安全隐患”吗?

下面就来举例我说说:

1问题描述

打印输出的数据并不是理论值,如下图(右边):

2acc8ea2-3b2b-11ed-9e49-dac502259ad0.png

2进一步描述问题

请细致注意看下面代码,有如以下奇怪的现象:

int a=5;floatx=a;     //这里转换是没有问题的。%f打印x是 5.000000
printf("%d
",a);printf("%f
",a);  //输出为什么是0.000000?-----问题1printf("%f
",x);printf("%d
",x);  //输出为什么是0?-----问题2printf("%f,%f
",a,x);  //输出都是0.000000  为什么?   ----问题3printf("%f,%f
",x,a);  //调换一下a,x的顺序,正常了,为什么?----问题4printf("%d,%f
",a,x);
getchar();return0;

这里有四个问题,下面会进行解答。

3printf()函数的原理解释

明确这些问题首先须要明确printf()函数的工作原理

printf()维持了一个需要打印的变量栈,默认情况下,參数进栈的顺序是由右向左的。因此,參数进栈以后的内存模型例如以下图所看到的:

2af733dc-3b2b-11ed-9e49-dac502259ad0.png

打印的时候,printf依照字符转换说明符规定的格式从低地址開始提取数据。直到參数打印完。

比方遇到 %f 说明符就提取8个字节的数据,遇到 %d 就提取4个字节。printf()事实上不知道參数的个数,它仅仅会依据format中的打印格式的数目依次打印堆栈中參数format后面地址的内容。

这样一来,printf()事实上存在安全隐患:它会强行读取内存的数据当作正常数据输出,没有边界检测(非常有可能产生堆溢出)。

比如这种代码:

char string[]="Hello World!";printf("String: %s  ,强行再读一次: %#p
", string);printf("String: %s  ,强行再读一次: %#s
", string);
输出如下:

String:Hello World!  , 强行再读一次: 0X001C1073 
String: Hello World!  ,强行再读一次: 閮

4问题解释

问题1:printf("%f ",a) 输出为什么是0.000000?

答:%f 提取8字节。a仅仅有4字节,提取出来的数占了float表示法的指数部分。尾数部分为0。所以终于是0

问题2:printf("%d ",x) 输出为什么是0?

答:%d 提取4字节,x有8字节。提取出来的数实际上是float表示法的指数部分(恰好是0),所以终于是0

问题3:printf("%f,%f ",a,x); 输出都是0.000000 为什么?

答:參照问题1的解释。提取了八字节后,后面的已经乱了

问题4:printf("%f,%f ",x,a);调换一下a,x的顺序,正常了,为什么?

答:这是正常的情况而已。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61309
  • Printf
    +关注

    关注

    0

    文章

    79

    浏览量

    13478

原文标题:C语言printf()函数具体解释和安全隐患

文章出处:【微信号:C语言学习联盟,微信公众号:C语言学习联盟】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    盘点近来锂电池的安全隐患事故

    锂电池的安全隐患一直都有存在,从手机、笔记本到电动汽车,均有锂电池发热甚至起火的事件发生,并且这一现象不再只发生在山寨电子产品中,许多锂电池的安全隐患事故,已经牵扯到了诸如尼康、松下、三星、小米、联想、特斯拉等国内外的品牌公司。
    发表于 06-04 09:44 8576次阅读

    网络安全隐患的分析

    、管理网络安全等方面。  物理网络安全风险物理网络安全的风险是多种多样的。网络的物理安全主要是指地震、水灾、火灾等环境事故,电源故障、人为操作失误或错误,设备被盗、被毁,电磁干扰、线路
    发表于 10-25 10:21

    [分享] Ghost真的是存在很大的安全隐患

    ://www.pgos.cc 如果你说ghost win7这种操作系统存在很大的安全隐患,这就是错误的了,因为在实际之上这种操作系统是经过了我们反复的测试了,需要知道的一点就是ghost操作系统开发社区可能是会在我们的系统之中加入一些自己喜欢的程序或者是功能,但是这些都是无害的,更何况我们也是可以自己实现卸载。
    发表于 01-16 14:28

    福禄克便携式红外热像仪助你清除电气安全隐患

    红外热像仪提醒各商家,清除电气安全隐患,才能过一个安全又快乐的圣诞节。  每到节日,各大型商业中心都是人流聚集之地。人们趁着节日,各类物品都有优惠的时候,在商场大肆购物。如果此时发生消防事故,如火灾等
    发表于 03-18 18:35

    面粉洒到插排里 会不会有安全隐患

    不小心把面粉撒到插排里了 已经清理完了 不知道还会不会有安全隐患
    发表于 07-10 13:36

    电气安全隐患的监控管理

    智慧安全用电监控系统电压、电流数据变化在线监测单回路剩余电流、多回路剩余电流(漏电)在线监测 导线铜排温度在线监测 故障电弧在线探测 消防设备电源状态在线监测。智慧式用电安全隐患监管服务系统由用电
    发表于 08-22 10:49

    VR一体机家庭消防安全隐患排查内容

    体验过程中,用户置身于“真实”的生活场景(如家庭、宿舍、办公室等),通过系统提示学习消防隐患的科普知识,让参与者进一步增强在日常生活中自觉地做好自家消防安全隐患排查工作,从而起到积极正面的教学目的
    发表于 09-10 17:31

    请问家里电路可以这样设计吗,有没什么安全隐患

    那位老师傅可以帮小弟看下,家里电路这样设计可否,有没什么安全隐患。。主要是家里配电箱已经固定,只有18个槽位、、
    发表于 04-03 13:37

    安全隐患检测系统的设计与实现

    随着网络技术的迅速发展,网络安全已经成为人们关注的焦点。安全隐患检测技术可以协助决策者及早发现网络的脆弱性,防患于未然。文章描述了安全隐患检测系统的原理和体
    发表于 06-15 11:01 13次下载

    指纹锁的安全隐患_指纹锁的优缺点

    指纹锁安全隐患有哪些?指纹门锁安全隐患盘点。想要家里安全过得舒心,“门锁”的重要性是摆在第一位。然而,现实生活中人们常常会面临忘带钥匙的尴尬,因此锁具厂商会寻求更便捷的开门方式,于是智能锁在家庭市场热了起来。指纹锁是目前非常常见
    发表于 06-03 11:33 2.1w次阅读

    关于那些智能电动汽车的安全隐患

    文章较长,分为三个大部分,按照安全隐患的感知程度分类。首先是驾驶员易于感知到的安全隐患,其次是驾驶员不易于感知的,最后再说对驾驶员而言透明的安全隐患。 驾驶员易于感知的安全隐患 1、“
    的头像 发表于 01-14 10:13 5038次阅读
    关于那些智能电动汽车的<b class='flag-5'>安全隐患</b>

    机房的安全隐患该如何消除

    机房的安全隐患--供电问题 虽然机房的电源问题众所周知,但在实际工作中没有得到足够的重视,这种情况经常发生。如果ups或ups电池在日常使用中损坏,如果发生电源故障,所有设备将立即停止,网络设备
    发表于 01-19 09:57 561次阅读

    论北京市医院用电安全隐患问题的消除对策

    摘要:提出加强应急电源管理、开展电能质量治理、提升配电系统柔性安全水平,有针对性地进行医院各类人员用电安全培训,消除医院用电安全隐患的对策。
    的头像 发表于 02-10 11:27 876次阅读
    论北京市医院用电<b class='flag-5'>安全隐患</b>问题的消除对策

    配电室常见六大安全隐患,你疏忽了几个?

    配电室常见六大安全隐患,你疏忽了几个?
    的头像 发表于 03-01 09:13 1388次阅读
    配电室常见六大<b class='flag-5'>安全隐患</b>,你疏忽了几个?

    如何预防电力故障及安全隐患

    电力故障和安全隐患一直是人们关注的热点问题。在现代社会中,电力已经成为人们生活和工作中不可或缺的一部分。然而,随着电力设备的增加和用电负荷的增大,电力故障和安全隐患也随之增加。那么如何预防电力故障及安全隐患呢?高压电缆故障及
    的头像 发表于 08-29 13:51 428次阅读