我是一个C语言初学者,最近发现atoi函数已经被strtol等函数所取代。
我在哪里可以找到一份C语言废弃函数的列表?
“不安全”和“已弃用”之间有区别。 atoi()
是不安全的,但是gcc不会告诉你停止使用它,因为它很危险。使用gets()会产生不同的结果 :) YCMV(您的编译器可能会有所不同)。
一般来说,如果一个函数可能失败并且没有错误检查,则不要使用它。如果一个函数允许您写入内存区域而无法传递大小限制,请勿使用它。
后者可以通过函数原型更容易确定。然而,如果您对自己正在做的事情有所意识,您很快就会意识到,您无法知道从 atoi()
获得的是否真的是用户在命令行上输入的结果的字符串表示形式。
这种推理与标准C库毫不相关。您将遇到大量库代码,其中一些是好的。没有任何列表可以替代学习防御性编码习惯。
atoi
和 gets
一样糟糕 - 除非您对它们将接收的输入有严格控制,否则两者都会导致未定义行为。 - R.. GitHub STOP HELPING ICE
atoi()
并没有被弃用;只是现在C标准库中有更好的选择。 - James McNellis