网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
防止Visual C++应用程序缓冲区溢出
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
数数据范围反映的都是下层硬件的实际情况,而不是现实世界的需要。例如,当你在代码中把某个值定义为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);
}

  请注意,这段代码首先使用Parse()方法把输入信息转换成Int32类型。这种简单的转换可以为很多输入方面的问题进行定位。在这个例子中,代码使用System::OverflowException异常检查值是否太大或太小,使用System::FormatException异常检查值的格式是否正确。在代码确保输入信息是一个合理的Int32值之后,接着检查实际的输入范围。

  值的数据类型是最容易检查的,因为它们都有特定的范围。值与对象不同,它没有隐藏的元素,使开发者感到惊讶的地方很少。

  一般来说,用于验证值数据类型的所有事务是在代码中定义上下边界,接着对值进行检查。

  当我们使用对象的时候,数据值验证的问题就出现了。例如,你希望用户把几个字符串中的一个作为输入信息,那么使用列表框来减少用户的输入选择是有帮助的。当用户面对只有数个选项的列表框的时候,他们是不可能输入无效信息(例如脚本)的。

  有时候你必须为问题设计独特的方案。例如,你如何确保某个特定的方法接收数量固定的、范围不连续的输入信息?在这种情况下枚举(enumeration)可能会节约时间。列表2显示了在代码中如何把枚举用于自动化的数据范围变化。

  类表2:使用枚举检查数据的范围



  请注意,DisplayString()的声明需要一个SomeStrings枚举类型的输入信息(参数)。调用者不可能使用其它的任何输入类型,这意味着DisplayString()方法自动地受到了保护。例如,你不可能把某个脚本作为输入信息,因为它不是正确的类型。
  验证数据的长度

  有些数据类型不太容易进行快速检查。例如,字符串可以包含任意数量的字符,其数量最多只受到.NET框架组件和机器的限制。当然,很少人真的需要这么长的字符串。通常开发者要求字符串有一个最小和最大的长度范围。因此,你不需要验证接收到的是否是字符串,只需要验证它的长度是否正确。否则,其他人可能发送任意长度的字符串,而这样就会导致缓冲区泛滥。列表3显示了通过验证每个参数的数据
  • 上一篇资讯: VC++定制状态栏的方法
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号