C函数列表中哪些已被弃用?

10

我是一个C语言初学者,最近发现atoi函数已经被strtol等函数所取代。

我在哪里可以找到一份C语言废弃函数的列表?


3
相关链接:https://dev59.com/BnM_5IYBdhLWcg3wvFzI - kennytm
1
谁说atoi已经过时了?在我的机器上它并没有被弃用;它不会报错,但有时这也是可以的。 - crazyscot
7
atoi()并没有被弃用;只是现在C标准库中有更好的选择。 - James McNellis
请查看http://www.opengroup.org/onlinepubs/000095399/functions/atoi.html中的“应用程序使用”段落。“(atoi)被保留,因为(atoi)在现有代码中被广泛使用。” - Neeladri Vishweswaran
ISO C 中没有废弃的函数。 - M.M
显示剩余2条评论
1个回答

3

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

一般来说,如果一个函数可能失败并且没有错误检查,则不要使用它。如果一个函数允许您写入内存区域而无法传递大小限制,请勿使用它。

后者可以通过函数原型更容易确定。然而,如果您对自己正在做的事情有所意识,您很快就会意识到,您无法知道从 atoi()获得的是否真的是用户在命令行上输入的结果的字符串表示形式。

这种推理与标准C库毫不相关。您将遇到大量库代码,其中一些是好的。没有任何列表可以替代学习防御性编码习惯。


gcc 可能假定您正在处理 C 库的宽容实现。从概念上讲,atoigets 一样糟糕 - 除非您对它们将接收的输入有严格控制,否则两者都会导致未定义行为 - R.. GitHub STOP HELPING ICE
“gets”是第一个也是唯一一个在C99 TC3中被弃用的函数。它在C11中被完全删除。因此,目前语言中没有弃用的函数。(在二进制文件开头使用ungetc的引用在C99中也被弃用了(现在是未定义行为)。我找不到与之比较的C90版本,所以我不知道它以前的行为。) - Ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接