


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、找错 void test1() char string10; char* str1=0123456789; strcpy(string, str1); 这里 string 数组越界,因为字符串长度为 10,还有一个结束符0。所以总共有 11 个字符长度。string 数组大小为 10,这里越界了。 PS:使用 strcpy 函数的时候一定要注意前面目的数组的大小一定要大于后面字符串的大小,否则便是访问越界。 void test2() char string10, str110; for(i=0; i10;i+) str1i =a; strcpy(string, str1); 这里有一个一眼
2、就能看出的问题,那就是变量 i 没有定义,这在代码编译阶段编译器可以帮你发现,很容易搞定。然而很多问题是自己造成的漏洞,编译器是帮不上什么忙的。这里最大的问题还是 str1 没有结束符,因为 strcpy 的第二个参数应该是一个字符串常量。该函数就是利用判断第二个参数的结束符来得到是否拷贝完毕。所以在 for 循环后面应加上 str1p9 = 0; PS:字符数组和字符串的最明显的区别就是字符串会被默认的加上结束符0。 void test3(char* str1) char string10; if(strlen(str1)=10) strcpy(string, str1); 这里的问题仍是越
3、界问题。strlen 函数得到字符串除结束符外的长度。如果这里是=10 话,就很明显越界了。 小结:上面的三个找错的函数,主要是考查对字符串和字符数组的概念的掌握以及对 strcpy 函数和 strlen 函数的理解。 2、找错 DSN get_SRM_no() static int SRM_no; int I; for(I=0;I=MAX_SRM) return (NULL_SRM); else return SRM_no; 这里 for 循环的判断语句是后来我加上的,估计在网上流传的时候被人给弄丢了,根据对程序的分析,给补上了。估计错误应该不是这儿。 简单的阅读一下这个函数,可以大概的可以
4、猜测出这个函数的功能是分配一个空闲的 SRAM 块。方法:从上次分配的 RAM 块后的 RAM 块开始检测 SRAM 每个 RAM 块,看是否是 IDLE 状态,如果是 IDLE 则返回当前的 RAM 块的号 SRM_no.如果所有的 RAM 块都不是 IDLE 状态, 则意味着无法分配一个 RAM 给函数调用者,返回一个表示没有 RAM 可分配的标志(NULL_SRM)。 经过上面的分析,则这里可以知道,这个函数的错误是 for 循环里面没有给 SRM_no 这个变量累加 1. 3、写出程序运行结果 int sum(int a) auto int c=0; static int b=3; c
5、+=1; b+=2; return(a+b+c); void main() int I; int a=2; for(I=0;I5;I+) printf(%d, sum(a); 运行结果是:8,10,12,14,16, 在求和函数 sum 里面 c 是 auto 变量,根据 auto 变量特性知每次调用 sum 函数时变量 c 都会自动赋值为 0.b 是 static 变量,根据 static变量特性知每次调用 sum 函数时变量 b 都会使用上次调用sum 函数时 b 保存的值。 简单的分析一下函数,可以知道,若传入的参数不变,则每次调用 sum 函数返回的结果,都比上次多 2.所以答案是:8
6、,10,12,14,16, 4、func(1) ? int func(int a) int b; switch(a) case 1: 30; case 2: 20; case 3: 16; default: 0; return b; 在 case 语句中可能忘记了对变量 b 赋值。如果改为下面的代码: int func(int a) int b; switch(a) case 1: b = 30; case 2: b = 20; case 3: b = 16; default: b = 0; return b; 因为 case 语句中漏掉了 break 语句,所以无论传给函数的参数是多少,运行
7、结果均为 0. 5、aq - p ? int a3; a0=0; a1=1; a2=2; int *p, *q; p=a; q=&a2; 很明显:aq - p = a2 = 2; 6、内存空间占用问题 定义 int *a34, 则变量占有的内存空间为:16 位系统 24,32 位编译系统中是 48. PS:公式:3 * 4 * sizeof(int *) . 7、程序编写 编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005 年 1月 1 日 0 时 0 分 0 秒。 void Rese
8、tTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second) int dayOfMonth12=31,28,31,30,31,30,31,31,30,31,30,31; if( *year 0 | *month 12 | *date 31 | *hour 23 | *minute 59| *second 60 ) return; if( *year%400 = 0 | *year%100 != 0 & *year%4 = 0 ) dayOfMonth1 = 29; if(*second = 60) *second = 0; *minute += 1; if(*minute = 60) *minute = 0; *hour += 1; if(*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医药养生文化课件
- 《GB 1589-2016汽车、挂车及汽车列车外廓尺寸、轴荷及质量限值》(2025版)深度解析
- 版个人建房地基订购合同
- 山东轻工职业学院《营养生理学》2023-2024学年第二学期期末试卷
- 宁夏工业职业学院《现代数字信号处理》2023-2024学年第二学期期末试卷
- 吉林省长春市九台区2025届初三下学期质量监测检测试题英语试题含答案
- 辽宁医药职业学院《有机化学DI》2023-2024学年第二学期期末试卷
- 下花园区2025届数学四年级第二学期期末质量跟踪监视试题含解析
- 南京特殊教育师范学院《医学科研方法与论文写作》2023-2024学年第一学期期末试卷
- 江西农业大学南昌商学院《高等数学E(一)》2023-2024学年第一学期期末试卷
- 财建2016504号-基本建设项目建设成本管理规定-含附件
- GB/T 18323-2022滑动轴承烧结轴套尺寸和公差
- 成都市中考英语题型专项复习练习(word版):补全表格
- 中国民间艺术的奇妙之旅知到章节答案智慧树2023年南昌大学
- 《危险化学品重点县专家指导服务手册》
- 《美的集团营运资金管理(案例论文)》
- 人教部编版《道德与法治》五年级下册第12课《富起来到强起来》优质课件
- ISO9001管理体系实战案例 质量目标
- 大学课件-工厂化育苗(全套)
- 2023年云南省烟草专卖局公司招聘笔试题库及答案解析
- LY/T 1662.7-2008数字林业标准与规范第7部分:数据库建库标准
评论
0/150
提交评论