WEB开发网
开发学院软件开发VC 防止Visual C++应用程序缓冲区溢出 阅读

防止Visual C++应用程序缓冲区溢出

 2008-11-13 19:32:40 来源:WEB开发网   
核心提示: 验证数据的范围编程语言提供的大多数数据范围反映的都是下层硬件的实际情况,而不是现实世界的需要,防止Visual C++应用程序缓冲区溢出(3),例如,当你在代码中把某个值定义为Int32的时候,它超出了Int16的值范围,但是在Int32的值范围中,就意味着用户输入的值应该在-2,147,

验证数据的范围

编程语言提供的大多数数据范围反映的都是下层硬件的实际情况,而不是现实世界的需要。例如,当你在代码中把某个值定义为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);
}

上一页  1 2 3 4 5 6 7  下一页

Tags:防止 Visual 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接