检测输入中的整数溢出
Detect Integer Overflow in Input
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之间的唯一区别是如何解释它们。您的问题没有解决方案,如果对您如此关键,请考虑切换到浮点参数,检查值和打字。更新:我认为您想要运行时间检查函数参数值由另一个程序员提供,而不是控制台输入。
相关文章:
- 整数溢出,最大值为 pow(10,19)
- 模函数,避免C++整数溢出
- 优化正在杀死我在 clang 6 中的整数溢出检查
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 我很难理解这些关于检测整数溢出的评论
- 检测 32 位整数溢出
- 如何在没有整数溢出的情况下找到n%(k*k)
- C 中俄罗斯农民算法中的整数溢出
- 检查Android NDK COD中的整数溢出
- 对于特定情况的整数溢出似乎是由整数溢出引起的错误
- 如何修复整数溢出警告
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- 整数溢出是否会影响其他变量
- 为什么功能不给整数溢出
- 有符号整数溢出、内部函数和未定义的行为
- 整数溢出不会发生:它们从0重新启动
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 为什么Turbo C Wraparound每次签名的整数溢出,尽管签名的整数溢出是不确定的
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性