您是否可以向 atoi 函数提供任何会产生错误(可能会或可能不会使程序崩溃)的东西?
编辑:错误被定义为任何会产生编译错误的东西,或者会导致程序在执行期间终止的东西。
任何会产生编译错误的东西
如果您提供的参数atoi()
是不兼容的类型,您将收到编译时错误。
会导致程序在执行期间终止的东西
如果你提供atoi()
了一个无效的const char*
指针,你的代码的行为将是不确定的。虽然没有任何保证,但如果指针是NULL
或指向不可读的内存,则程序可能会终止(这取决于操作系统和硬件架构)。
我怀疑这个问题更像是“在将输入传递给 atoi 之前,我是否必须对来自我不信任的来源的输入进行清理?”
大多数情况下都指定了正确编写的 atoi 函数的行为。它将字符转换为数字,直到遇到非数字的东西然后停止。然而 atoi 被认为容易受到溢出的影响
您应该改用 strtol ;它的规格更严格
当然,您的 c 运行时中的实现可能会被破坏-但是您对此无能为力