OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4067|回复: 3

关于C标准库函数的疑惑

[复制链接]

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1369
金钱
1369
注册时间
2014-2-13
在线时间
169 小时
发表于 2016-1-14 21:40:44 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 solo 于 2016-1-14 21:42 编辑

C标准库函数里存在这么两类危险群体:
1、缓存溢出(http://www.openedv.com/thread-65085-1-1.html
2、线程安全
如asctime,asctime_r;ctime,ctime_r;gmtime,gmtime_r都是类似的,所以,时间函数的 _r 版本都是线程安全的。

这些库函数都有相应的安全版本,但是最初版本才是我们熟知的(课本上只有这个)。
缓存溢出:操作不好就飞了
例如,sprintf容易写穿,对应安全版sbprintf死死限制住格式后放入缓存的字符串长度。

线程安全:不可重入,如果重入会出现不可预知的问题
例如,localtime内部定义了静态变量,返回该变量的指针,不可重入,对应安全版localtime_r可重入。

对于很多人来说这些新生的版本可能都很陌生,但是能从源头上来解决一些潜在的问题,为什么放着不用呢?但是这些函数是否真的规范呢?有些自己从书中找到依据(外籍书),但是有些却没有找到。查阅里一些库函数的总结,大多都没有收录(中文版)。但是这些在keil里肯定是能用的,不知有没有对这些库函数的历史了解的,来解答一下。

最佳答案

查看完整内容[请看2#楼]

keil说明书里有关于这个的说明:http://www.openedv.com/forum.php?mod=viewthread&tid=65085&page=1&extra=#pid369761
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1369
金钱
1369
注册时间
2014-2-13
在线时间
169 小时
 楼主| 发表于 2016-1-14 21:40:45 | 显示全部楼层
本帖最后由 solo 于 2016-1-18 08:12 编辑

keil说明书里有关于这个的说明:http://www.openedv.com/forum.php?mod=viewthread&tid=65085&page=1&extra=#pid369761
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-1-14 22:56:42 | 显示全部楼层
没有研究,围观下.
回复

使用道具 举报

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1369
金钱
1369
注册时间
2014-2-13
在线时间
169 小时
 楼主| 发表于 2016-1-15 08:11:58 | 显示全部楼层
自己顶顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 21:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表