为了账号安全,请及时绑定邮箱和手机立即绑定

必须(应该)避免使用标准库中的哪些函数?

必须(应该)避免使用标准库中的哪些函数?

C
ibeautiful 2019-11-22 14:23:04
我在Stack Overflow上已经读到一些C函数“过时”或“应避免”。您能给我一些这种功能的例子以及原因吗?这些功能有哪些替代方案?我们可以安全地使用它们吗?
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

人们再三重复着类似咒语的荒谬断言,即str函数的“ n”版本是安全版本。


如果那是他们的意图,那么它们将始终为null终止字符串。


函数的“ n”个版本被编写用于固定长度的字段(例如早期文件系统中的目录条目),其中仅当字符串不填充该字段时才需要nul终止符。这也是为什么函数具有奇怪的副作用(如果仅用作替换)效率低下的原因-以strncpy()为例:


如果s2指向的数组是短于n个字节的字符串,则将空字节附加到s1指向的数组中的副本上,直到总共写入n个字节为止。


由于分配给处理文件名的缓冲区通常为4 KB,因此可能会导致性能大幅下降。


如果您想要“应该”的安全版本,则可以获取-或编写自己的-strl例程(strlcpy,strlcat等),该例程始终使字符串终止,并且没有副作用。请注意,尽管它们并不是真正安全的,因为它们可以无声地截断字符串-在任何实际程序中,这很少是最好的方法。在某些情况下可以这样做,但在许多情况下可能会导致灾难性的后果(例如打印出医疗处方)。


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 609 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信