猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
必须(应该)避免使用标准库中的哪些函数?
我在Stack Overflow上已经读到一些C函数“过时”或“应避免”。您能给我一些这种功能的例子以及原因吗?
这些功能有哪些替代方案?
我们可以安全地使用它们吗?
ibeautiful
浏览 649
回答 3
3回答
精慕HU
人们再三重复着类似咒语的荒谬断言,即str函数的“ n”版本是安全版本。如果那是他们的意图,那么它们将始终为null终止字符串。函数的“ n”个版本被编写用于固定长度的字段(例如早期文件系统中的目录条目),其中仅当字符串不填充该字段时才需要nul终止符。这也是为什么函数具有奇怪的副作用(如果仅用作替换)效率低下的原因-以strncpy()为例:如果s2指向的数组是短于n个字节的字符串,则将空字节附加到s1指向的数组中的副本上,直到总共写入n个字节为止。由于分配给处理文件名的缓冲区通常为4 KB,因此可能会导致性能大幅下降。如果您想要“应该”的安全版本,则可以获取-或编写自己的-strl例程(strlcpy,strlcat等),该例程始终使字符串终止,并且没有副作用。请注意,尽管它们并不是真正安全的,因为它们可以无声地截断字符串-在任何实际程序中,这很少是最好的方法。在某些情况下可以这样做,但在许多情况下可能会导致灾难性的后果(例如打印出医疗处方)。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C
typedef入门问题
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续