您尚未登录。

#1 2017-03-02 12:08:35

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

怎么glibc没有gets_s呢?

man gets_s没有这条目?!还有好多C11边界检查函数都没有?!


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#2 2017-03-02 18:52:32

SilverRainZ
成为非人类
所在地: Arch Linux CN Community
注册时间: 2015-05-01
帖子: 110
个人网站

Re: 怎么glibc没有gets_s呢?

_s 系列函数应该是 Visual Studio 实现的吧,GCC 并没有。

离线

#3 2017-03-11 19:29:54

cuihao
所在地: USTC, Hefei
注册时间: 2011-08-19
帖子: 1,223
个人网站

Re: 怎么glibc没有gets_s呢?

应该不会有了,GNU 这边不喜欢这套东西。

这是C11争议很大的一部分。MS 力推的,最后被设置为可选的。
这些函数不止是加个 _s 的事情,还引入一套和以前 errno 机制不同的 Bounds-checking interfaces 机制,而这套机制的实现细节又是各种 implementaion defined。你要注册个 runtime-constraint handler 处理违反边界限制的情况,不然可能默认的 handler 是杀死进程啊。

而且说到底,不还是程序员给出边界限制,没有任何过程自动化。那这样为啥不用 fgets 呢,根本没啥优势啊,只不过换了一套更复杂的错误处理。

一些资料可以翻翻:
https://www.reddit.com/r/C_Programming/ … pport_the/
https://gustedt.wordpress.com/2013/02/0 … iolations/
https://www.securecoding.cert.org/confl … interfaces


Site: CVHC.CC   Twitter: @cuihaoleo   Org: LUG@USTC
AD:  ~欢迎参与志愿计算~

离线

页脚