检测输入中的整数溢出

Detect Integer Overflow in Input

本文关键字:整数 溢出 输入 检测      更新时间:2023-10-16

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

例如,让我们假设我们使用的是16位签名的整数,范围为-32768至32767。

如果用户将55555输入程序中,则将其包装为负数,以便如果您使用的是可以接受任何数字的函数,则结果将是错误的。

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


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

如果您使用的是strtol之类的东西,则将errno设置为ERANGE,如果发生溢出

如果用户将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";
}

C或C 是否有办法检查 用户不在整数类型的范围内?

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

INT和UINT之间的唯一区别是如何解释它们。您的问题没有解决方案,如果对您如此关键,请考虑切换到浮点参数,检查值和打字。更新:我认为您想要运行时间检查函数参数值由另一个程序员提供,而不是控制台输入。