首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C标准库的问题?

C标准库的问题?
EN

Stack Overflow用户
提问于 2012-03-19 16:25:43
回答 3查看 314关注 0票数 1

我从不同的来源了解到C标准库中有很多错误、问题和设计缺陷。有些与字符串处理函数有关,有些与I/O等有关。

这是真的吗?如果是的话,有人能列出一些最常见的问题吗?

注意:我指的是ISO C库

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-19 16:37:32

下面是几个已知的设计问题:

  1. 输入函数,如gets (在C99中不推荐,在C11中消失,但仍然潜伏在天知道有多少遗留代码中),scanf使用普通的%s转换说明符等,可以超出目标缓冲区;
  2. 使用静态缓冲区在调用之间存储状态的函数(如strtok )是不可重入的;

至于实现问题,我不认为需要一个好的rand函数的人会对大多数实现中的库存PRNG函数感到满意。

票数 2
EN

Stack Overflow用户

发布于 2012-03-19 16:28:51

ISO C90和C99中最大的问题可能是gets,它容易受到缓冲区溢出的影响。事实上,它似乎已经从新的C11标准中删除了。

用于获取临时文件tmpnam的ISO函数易受多用户平台上的争用条件的影响。POSIX标准定义了一个更安全的函数mkstemp

此外,许多字符串函数(如strchr )都不是类型安全的;它们接受一个const char*,但将一个char*返回到同一个缓冲区中,因此通过使用它们,您可以隐式地丢弃const。然而,避免这一点是一个谨慎的编程问题;字符串函数本质上并不像getstmpnam那样不安全。

最后,许多函数(如strcpystrcatsprintf )不进行边界检查,但由于它们不像gets那样处理外部输入,所以可以安全地使用它们。snprintf是自C99以来相对于sprintf更安全的替代方案。

票数 2
EN

Stack Overflow用户

发布于 2012-03-19 16:33:15

您正在寻找的一些内容可以在TR-24731-1“C库第I部分:边界检查接口的扩展”的基本原理中找到。

不管您是否同意TR24731-1试图解决这些问题的方式,我认为这是C标准库中许多问题的一个很好的概要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9773920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档