您尚未登录。

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

xtricman
喵了个咪
注册时间: 2012-12-26
帖子: 271

怎么glibc没有gets_s呢?

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

离线

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

LastAvengers
其实不是会员
所在地: Royal Blue Shit Univeristy
注册时间: 2015-05-01
帖子: 92
个人网站

Re: 怎么glibc没有gets_s呢?

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

离线

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

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

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: I-YU.ME   Twitter: @cuihaoleo   Org: LUG@USTC
AD:  ~欢迎参与志愿计算~

离线

页脚