防止Visual C++应用程序缓冲区溢出
2008-11-13 19:32:40 来源:WEB开发网验证数据的范围
编程语言提供的大多数数据范围反映的都是下层硬件的实际情况,而不是现实世界的需要。例如,当你在代码中把某个值定义为Int32的时候,就意味着用户输入的值应该在-2,147,483,648到2,147,483,647之间。这个数字是依赖于硬件条件的,计算机使用31位存储数据,1位存储符号(2^31 = 2,147,483,648)。但是,你的应用程序可能没有查明可接受的范围。
当硬件需求与应用程序的现实需求不一致的时候,你就必须在应用程序中包含特定的代码来检查潜在的错误条件。你在代码中可能希望接受1到40,000的数字,它超出了Int16的值范围,但是在Int32的值范围中。列表1显示了这类检查的例子。
列表1.检查数据范围错误
System::Void btnDataRange_Click(System::Object * sender, System::EventArgs * e)
{
Int32 TestData; // 保持输入的值
try
{
// 永远需要首先尝试分析数据
TestData = Int32::Parse(txtInput1->Text);
}
catch (System::OverflowException *OE)
{
// 溢出错误处理
MessageBox::Show(S"Type a value between 1 and 40,000.", S"Input Error",
MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
catch (System::FormatException *FE)
{
//溢出错误处理
MessageBox::Show(S"Type the number without extra charaters.", S"Input Error",
MessageBoxButtons::OK, MessageBoxIcon::Error);
return;
}
// 测试特定的数据范围
if (TestData < 1 || TestData > 40000)
//溢出错误处理
MessageBox::Show(S"Type a value between 1 and 40,000.", S"Input Error",
MessageBoxButtons::OK, MessageBoxIcon::Error);
}
- ››防止网站被JS挂马和查杀方法
- ››Visual Basic 2008 数学函数
- ››防止iphone进入休眠后台播放音乐
- ››防止iphone进入休眠后台播放音乐
- ››Visual Studio2005中Smart Device的问题
- ››Visual Studio 中根据数据库字段动态生成控件
- ››Visual Studio 11全新黑色主题
- ››Visual Studio 2011 Beta新特性(一):安装VS201...
- ››应用程序的配置管理Poco
- ››防止SQL SERVER的事件探查器跟踪软件的SQL脚本
- ››Visual Studio自定义调试窗体两个小技巧
- ››Visual Studio 2005 Team Edition for Database P...
更多精彩
赞助商链接