电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

实验1 网络安全深入C编程

9页
  • 卖家[上传人]:公****
  • 文档编号:508286295
  • 上传时间:2023-05-08
  • 文档格式:DOC
  • 文档大小:68.01KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、课程名称:计算机网络安全计算机网络安全实验讲稿授课教师:许玉龙适用于计算机应用技术专业课 程 简 介 课程名称:计算机网络安全 课程类别:专业必修课 授课对象:计科专业 学时:54学时(理论36 ,实验18) 学分:3学分 考核方法:课程设计+实验+试卷 使用教材:清华大学出版社网络安全基础应用与标准 先修课程:C/C+程序设计、计算机网络、数据库原理等实验一:深入C/C+编程主 要 内 容一、对内存空间的理解二、函数相关三、对数组的理解四、指针与数组五、结构体一、对内存空间的理解主讲内容:在C 中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。用new或malloc分配内存时,必须要对此指针赋初值。用delete 或free释放内存后,必须要将指针指向NULL

      2、不能修改指向常量的指针数据自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C 里面没有这个区分了,他们共同占用同一块内存区。 常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多,在const的思考一文中,我给出了6种方法) 首先,我们举一个例子: void f() int* p=new int5; 这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他分配的是一块栈内存,所以这句话的意思就是:在栈内存中存放了一个指向一块堆内存的指针p。在程序会先确定在堆中分配内存的大小,然后调用operator new分配内存,然后返回这块内存的首地址,放入栈中,他在VC6下的汇编代码如下: 00401028 push 14h 0040102A call operator new (00401060) 00401

      3、02F add esp,4 00401032 mov dword ptr ebp-8,eax 00401035 mov eax,dword ptr ebp-8 00401038 mov dword ptr ebp-4,eax 这里,我们为了简单并没有释放内存,那么该怎么去释放呢?是delete p么?澳,错了,应该是delete p,这是为了告诉编译器:我删除的是一个数组,VC6就会根据相应的Cookie信息去进行释放内存的工作。函数体中的指针或引用常量不能被返回 Char *func(void)char str=”Hello Word”;/这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉return str; 函数体内的指针变量并不会随着函数的消亡而自动释放问题:栈内存使用下面程序运行有什么问题?char* GetString(void)char p = hello world;return p;/ 编译器将提出警告void Test4(void)char *str = NULL;str = GetString();/ str 的内容是垃圾cout st

      4、r endl;答案与分析:返回栈内存,内存可能被销毁,也可能不被销毁,但是,出了作用域之后已被标记成可被系统使用,所以,乱七八糟不可知内容,当然,返回的指针的内容,应该是不变的,特殊时候是有用的,比如,可以用来探测系统内存分配规律等等。二、函数相关 C+函数中值的传递方式有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference)void fun(char c) /pass by valuevoid fun(char *str) /pass by pointervoid fun(char &str) /pass by reference如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构函数的返回类型不能省略,就算没有也要加个void三、对数组的理解/数组char a=”Hello Word!”;char b10;strcpy(b,a);if (strcmp(a,b)=0)/指针char a=”Hello Word!”;char *p;p=new charstrlen(a

      5、)+1;strcpy(p,a);if (strcmp(p,a)=0)四、指针与数组记住一点,C无法知道指针所指对象的大小,指针的大小永远为4字节 char a=”Hello World!”char *p=a;countsizeof(a)end; /12字节countsizeof(p)endl; /4字节而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4 void fun(char a1000)countsizeof(a)endl; /输出4而不是1000附例1:思考:int main() char a=hello;char *p=hello;int k=strcmp(a,p); coutk endl; /0;a中的字符串与p指向的字符串相同,返回0cout(a = = p)endl;/0;表示a的地址与p的地址不相同,返回0char str1 = abc;char str2 = abc;char *str3 = abc;char *str4 = abc;cout ( str1 = = str2 ) endl;/0;表示str1的地址与str2的地址不同,返回0cout (

      6、str1 = = str3 ) endl;/0;表示str1的地址与str3指向内容不同,返回0cout ( str3 = = str4 ) endl;/1;表示str3指向内容与str4指向内容相同,返回1cout ( str2 = = str4 ) endl;/0;表示str2地址与str4指向内容不同,返回0/ str1,str2是数组变量,它们有各自的内存空间;/而,str3,str4是指针,它们指向相同的常量区域。return 0;附例子2.1:/*删除指定字符常规的解法int main()char Mystr1=she is our teacher!;char Mystr2=shr; int ktt=0; int len1=strlen(Mystr1)+1; int len2=strlen(Mystr2)+1; char *final = new charlen1;memset(final,0,len1);for(int index2=0;index2len2;index2+)for(int index1=0;index1len1;index1+) if(Mystr2ind

      7、ex2=Mystr1index1) Mystr1index1=0;for(int index1=0;index1len1;index1+)if(0!=Mystr1index1)finalktt+=Mystr1index1; printf(%s,final);return 0;例2.2 :/*利用字符存储性质,高效率删除指定字符*/int main()char str1=she is our teacher!;char str2=shr; int i,j,k=0; int len1=strlen(str1); int len2=strlen(str2); char *final = new charlen1;memset(final,0,len1);char temp 256;for (i=0;ilen2;i+)tempstr2i=1;for (j=0;jlen1;j+)if(1!=tempstr1j)finalk+ =str1j;cout高效率地在字符串中删除指定的字符nendl;printf(删除前源字符串str1是: %sn,str1);printf(要删除的字符str2 是: %sn,str2);printf(str1删除后的字符串是 : %sn,final);delete final;return 0;例3:./经典约瑟夫环用数组实现方法一int main()int TotalNumber, SetNumber;int k=0,OutNumber=0;int i;int *a;coutTotalNumber;coutSetNumber;if (SetNumberTotalNumber) return 1;/a=new intTotalNumber; /C+内存申请方法a=(int*)malloc(sizeof(int)*TotalNumber); /C内存申请方法 for (i=0;iTotalNumber;i+) ai=i+1;cout出圈的序列是:;while (OutNumberTotalNumber)for (i=0;iTotalNumber;i+)if (ai!=0) k+; if(k=SetNumber) coutai; ai=0; k=0; OutNumber+; coutendl

      《实验1 网络安全深入C编程》由会员公****分享,可在线阅读,更多相关《实验1 网络安全深入C编程》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.