


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言中的缺陷与陷阱 (博雅课期末作业:计算机网络安全与防护)刚进大学,学的第一门计算机语言就是C语言,这是我第一次接触到计算机语言,对它一无所知。有些同学之前已经学过了一些类似的语言,例如VB、PASCAL等等。因为从来没有学过计算机语言,所以在学习C语言的过程中,遇到了很多困难,许多问题都不理解。因此虽然我已经学完了这本书,但是对书中的内容都不知甚解。学过C语言的人都知道,指针是C语言中的一个重要概念,也是它的一个重要特色。正确而灵活地运用指针,可以有效地表示复杂的数据结构;能动态分配内存;方便地使用字符串;有效而方便地使用数组;在调用函数时能获得一个以上的结果;能直接处理内存单元地址等。掌握指针的应用,可以使程序简洁、紧凑、高效。但是任何事情都有两面性,C语言中的指针也是如此。举几个例子来说:1. 指针与数组在新的一年里我们需要将日历(calendar)数组清空:int (*monthp)31;for(monthp=calendar;monthp&calendar12;monthp+)int *dayp;for(dayp=*monthp;dayp&monthp31;dayp+)*dayp=0;在这个程序中用指针monthp以步进的方式遍历数组calendar。使用指针来操纵数组,常常需要跟C语言中最为“晦暗不明”的部分打交道,并常常遭遇到潜伏着的编译器bug。因此使用指针时,我们必须得小心翼翼,否则,程序很容易出错。2. 非数组的指针有一段程序如下:char *r,*malloc();r=mollac(strlen(s)+strlen(t);strcpy(r,s);strcat(r,t);这个例子有三个错误:一、malloc函数有可能无法提供请求的内存,这种情况下malloc函数会通过返回一个空指针来作为“内存分配失败”事件的信号。二、给r分配的内存在使用完成之后应该立即释放。三、最重要的是调用malloc函数是并未分配足够的内存。3. 数组边界问题C语言并不检验数组边界,因此,数组的两端都有可能越界而使其他变量的数据甚至程序代码被破坏。因此对于C语言来说,数组的边界检验是程序员的职责。C语言中一个拥有n个元素的数组中,却不存在下标为n的的元素,它的元素的下标范围是从0到n-1,使用数组时一定要注意到这一点。4. 表达式求值顺序一个表达式:ab&cd,C语言规定ab首先被求值。如果a确实小于b,cd必须紧接着被求值以计算整个表达式的值。但如果a大于或等于b,则cd根本不会被求值。 C中只有四个运算符&、|、?:和,指定了求值顺序。&和|最先对左边的操作数进行求值,而右边的操作数只有在需要的时候才进行求值。而?:运算符中的三个操作数:a、b和c,最先对a进行求值,之后仅对b或c中的一个进行求值,这取决于a的值。,运算符首先对左边的操作数进行求值,然后抛弃它的值,对右边的操作数进行求值。C中所有其它的运算符对操作数的求值顺序都是未定义的。事实上,赋值运算符不对求值顺序做出任何保证。5. 移位运算符C语言中,在向右移位时如果被移位的对象是无符号数,那么空出的位将被0填充。如果被移位的对象是有符号数,那么C语言实现既可以用0填充空出的位,也可以由符号位的副本来填充空出的位。移位计数也有一定的范围限制。如果被移位的对象长度是n位,那么移位计数必须大于或等于0,而严格小于n。因此,不可能做到在单次操作中将某个数值中的所有位都移出。还要注意的是,即使C语言实现将符号位复制到空出的位中,有符号整数的向右移位运算也不等同于除以2的某次幂。6. 可移植性缺陷C被很多人实现并运行在很多机器上。这也正是在一个地方写的C程序应该能够很容易地转移到另一个编程环境中去的原因。然而,由于有很多的实现者,它们并不和其他人交流。此外,不同的系统有不同的需求,因此一台机器上的C实现和另一台上的多少会有些不同。由于很多早期的C实现都关系到UNIX操作系统,因此这些函数的性质都是专于该系统的。当一些人开始在其他系统中实现C时,他们尝试使库的行为类似于UNIX系统中的行为。但他们并不总是能够成功。更有甚者,很多人从UNIX系统的不同版本入手,一些库函数的本质不可避免地发生分歧。今天,一个C程序员如果想写出对于不同环境中的用户都有用的程序就必须知道很多这些细微的差别。为了减少程序的错误,我们可以采取以下一些建议:1. 不要说服自己相信潜在的错误。有些错误极具伪装性和欺骗性。2. 直截了当的表明意图,这样做不仅有利于自己日后读程序,也方便其他人理解程序的用意和维护代码。3. 考察最简单的特例。这一原则适用于构思程序的工作方式,测试程序的工作情况和程序设计4. 使用不对称边界。5. 注意潜伏在暗处的Bug漏洞,避免使用那些“生僻”的语言特性。6. 防御性编程。对程序用户和编译器实现的假设不要过多!最后总结一下这学期我上博雅课的所得:了解了很多关于安全方面的小软件,如USB dumper,USB cleanner,Flash Disk Alert,ereaser,屏幕录像专家等,学习了文档加密、解密、隐藏,听了有关网络攻击方面的内容,还在课后看了电影
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跨境支付中的区块链技术应用挑战与机遇考核试卷
- 电力系统稳定性提升与改进考核试卷
- 通信设备高级数据传输故障排查考核试卷
- 环保型建筑保温材料的添加剂研究考核试卷
- 精加工财务管理规范化考核试卷
- 生物信息数据库共建共享协议
- 钢铁生产工艺保密补充合同
- 网络直播混音台租赁与音效设计制作合同
- 影视音乐制作公司技术秘密保密及竞业禁止合同
- 网红烧烤品牌授权代理合作协议及品牌营销推广支持合同
- 《安全生产法解读课件》
- (二模)临沂市2025年高三高考模拟考试英语试题卷(含答案)
- 解除分公司经营合同协议
- 湖南省天壹名校联盟2025届高三5月适应性考试(物理)
- 2025年中考英语考纲词汇(包括词性词义词转短语)
- 老人财产处置协议书范本
- 江西省赣州市2025届高三二模语文试题及参考答案
- 消化内科笔试试题及答案
- 端午节的美食与风味
- 2025年上海长宁区高三二模高考英语试卷试题(含答案详解)
- 印刷企业管理制度汇编
评论
0/150
提交评论