【问题标题】:List of deprecated C functions?已弃用的 C 函数列表?
【发布时间】:2010-05-23 18:42:53
【问题描述】:

我是一个 C 菜鸟,我刚刚发现 atoi 已被弃用,取而代之的是 strtol 等。

在哪里可以找到已弃用的 C 函数列表?

【问题讨论】:

标签: c


【解决方案1】:

不安全已弃用之间是有区别的。 atoi() 是不安全的,但是 gcc 不会告诉你停止使用它,因为它很危险。使用 gets() produces a different result :) YCMV(您的编译器可能会有所不同)。

一般来说,如果一个函数可能失败并且无法进行错误检查,请不要使用它。如果某个函数允许您写入内存区域而无法通过大小限制,请不要使用它。

后者更容易仅通过函数原型来确定。但是,如果您有点意识到自己在做什么,您会很快意识到您无法知道从atoi() 获得的内容是否真的是用户刚刚在命令行上输入的结果的字符串表示形式.

这个基本原理并不是标准 C 库独有的。你会遇到很多很多的库代码,其中一些很好。没有任何清单可以取代学习的、防御性的编码习惯。

【讨论】:

  • gcc 可能假设您正在处理 C 库的宽容实现。从概念上讲,atoigets 同样糟糕 - 除非您严格控制它们将接收的输入,否则它们都会导致未定义的行为
  • gets 是第一个也是唯一一个被弃用的函数(在 C99 TC3 中)。它后来在 C11 中被完全删除。因此,在这一点上,该语言中没有 no 已弃用的函数。 (在 C99 中不推荐使用的二进制文件开头还提到了 ungetc 的使用(现在是未定义的行为)。不过,我找不到可与之比较的 C90 版本,所以我不知道是什么它曾经这样做。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多