检测输入中的整数溢出

时间:2012-10-17 15:40:49

标签: c++ c integer overflow

在C或C ++中是否有办法检查用户提供的数字是否超出整数类型的范围?

例如,让我们假设我们使用的是16位有符号整数,范围为-32768到32767。

如果用户输入55555进入程序,这将被包装成一个负数,这样如果你使用的函数可以接受任何数字,结果就会出错。

在C或C ++中是否有办法确定用户提供的数字是否在整数类型的范围内?


更新:我在一个简单的减法程序中使用数字,它接受两个数字并从第一个减去第二个。

4 个答案:

答案 0 :(得分:5)

如果您使用strtol之类的内容,如果发生溢出,则会将errno设置为ERANGE

答案 1 :(得分:3)

  
    

如果用户在程序中输入55555,则会将其换行为负数

  

并非总是如此。这取决于你如何阅读这个数字。例如,如果您使用operator>>,该值将包装,则会被拒绝。

  
    

在C或C ++中是否有办法确定用户提供的数字是否在整数类型的范围内?

  

在C ++中,只需使用operator>>

#include <iostream>
int main() {
  signed short int i;
  std::cin >> i;
  if(std::cin)
    std::cout << "You entered a valid number!\n";
  else
    std::cout << "Aw c'mon, play by the rules.\n";
}

答案 2 :(得分:0)

  

在C或C ++中是否有办法检查是否提供了数字   user是否在整数类型的范围之外?

这取决于您使用的功能(strtol可以做到这一点)。查看文档。

答案 3 :(得分:0)

int和uint之间的唯一区别是如何解释它们。您的问题没有解决方案,如果它对您考虑切换到浮点参数,检查值和类型转换非常重要。更新:我认为你想要另一个程序员提供的运行时检查函数参数值,而不是控制台输入。