如何通过使用" limits "头使你的程序防御溢出的情况
How to make your program defensive against the situation of overflow by using “limits” header?
这是我做的代码,请告诉我如何通过使用"limits"头来防止溢出的情况
#include<iostream>
using namespace std;
#define MAX 100
int main()
{
cout<<"decimal to binary conversion"<<endl;
bool binary[MAX];
int decimal_num,i;
cout<<"decimal number:"<<endl;
cin>>decimal_num;
for(i=0; (decimal_num/2)!=0; ++i)
{
binary[i]=decimal_num%2;
decimal_num/=2;
}
binary[i]=decimal_num;
cout<<endl;
cout<<"Binary equivalent :"<<endl;
for(i; i>=0;--i)
{
cout<<binary[i];
}
cout<<endl<<endl;
return 0;
}
除了输入,似乎没有引起溢出的意义。
放弃使用cin
直接读取整数,在逐位读取时检查输入。
定义这个函数
// read an non-negative integer from stdin
int read_num(void) {
char input;
int ret = -1;
while (cin>>input) {
if ('0' <= input && input <= '9') {
int n = input - '0'; // the digit read
if (ret < 0) ret = 0;
// check if multiplying 10 will cause an overflow
if (INT_MAX / 10 < ret) {
cout << "overflow detected!" << endl;
return -1;
}
ret *= 10;
// check if adding n will cause an overflow
if (INT_MAX - n < ret) {
cout << "overflow detected!" << endl;
return -1;
}
ret += n;
} else break;
}
return ret;
}
在定义main()
和更改
之前cin>>decimal_num;
decimal_num = read_num();
if (decimal_num < 0) return 1;
请注意,bool
类型不用于存储整数,我认为您应该使用int
类型存储binary
。
你可以用这个来获取int型类型的大小:
static const unsigned MAX = 1 + std::numeric_limits<int>::digits;
我不太喜欢(+1)部分,所以这个定义应该更简洁:
static const unsigned MAX = sizeof(int) * std::numeric_limits<unsigned char>::digits;
相关文章:
- 奇怪的消息 (_Base_bitset::_M_do_to_ulong) 从溢出异常处理程序中打印出来
- 缓冲区溢出到其他 exe 的内存中?还是从远程桌面程序到 csrss.exe?
- 为什么我的程序一直给我堆缓冲区溢出,即使我没有超出数组的界限或覆盖任何值
- 使用getline()将字符串输入到程序中会导致下一个输入出现某种溢出
- OpenGL应用程序导致d3d11.dll中的堆栈溢出
- 用管道在C++中创建调度队列/线程处理程序:FIFO溢出
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 我在程序中遇到堆栈溢出异常C++
- 程序在函数声明时崩溃,出现未经处理的异常:堆栈溢出
- C++银行程序不工作堆栈溢出
- 如何在Windows x64 C++应用程序中捕获堆栈溢出
- 为什么Visual Studio说如果我的程序中没有编写任何数据结构代码,我就会出现堆栈溢出?C++
- 未经处理的异常堆栈溢出 win32 控制台应用程序
- C++程序中出现堆栈溢出错误
- 检测 Linux 上多线程C++应用程序中的堆栈溢出/覆盖
- 愚蠢程序中的堆栈溢出异常
- 为什么我在计算帕斯卡三角形元素时在递归 C 程序中出现堆栈溢出错误
- 如何在命令行应用程序中检测堆栈溢出.在macos上用C++编写
- 简单的程序集代码会产生缓冲区溢出
- 我的while程序溢出了?我做错了什么?