1

您是否可以向 atoi 函数提供任何会产生错误(可能会或可能不会使程序崩溃)的东西?

编辑:错误被定义为任何会产生编译错误的东西,或者会导致程序在执行期间终止的东西。

4

2 回答 2

3

任何会产生编译错误的东西

如果您提供的参数atoi()是不兼容的类型,您将收到编译时错误。

会导致程序在执行期间终止的东西

如果你提供atoi()了一个无效的const char*指针,你的代码的行为将是不确定的。虽然没有任何保证,但如果指针是NULL或指向不可读的内存,则程序可能会终止(这取决于操作系统和硬件架构)。

于 2012-11-07T00:59:39.187 回答
1

我怀疑这个问题更像是“在将输入传递给 atoi 之前,我是否必须对来自我不信任的来源的输入进行清理?”

大多数情况下都指定了正确编写的 atoi 函数的行为。它将字符转换为数字,直到遇到非数字的东西然后停止。然而 atoi 被认为容易受到溢出的影响

您应该改用 strtol ;它的规格更严格

当然,您的 c 运行时中的实现可能会被破坏-但是您对此无能为力

于 2012-11-07T01:15:27.063 回答