- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一.找错题
试题1:
void test1(){ char string[10]; char* str1 =0123456789; strcpy( string, str1 );}
?
试题2:
void test2(){ char string[10],str1[10]; int i; for(i=0; i10; i++) { str1 =a; } strcpy( string, str1 );}
?
试题3:
void test3(char* str1){ char string[10]; if( strlen( str1 ) =10 ) { strcpy( string, str1 ); }}
解答: 试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界;
对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string,str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分;
对试题3,if(strlen(str1)= 10)应改为if(strlen(str1) 10),因为strlen的结果未统计’\0’所占用的1个字节。
剖析: 考查对基本功的掌握: (1)字符串以’\0’结尾; (2)对数组越界把握的敏感度; (3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:
?
试题4:
void GetMemory( char*p ){ p = (char*) malloc( 100 );}void Test( void ) { char*str = NULL; GetMemory( str ); strcpy( str, hello world ); printf( str );}
?试题4传入中GetMemory(char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完
char *str = NULL;GetMemory( str ); 后的str仍然为NULL;
试题5:
char*GetMemory( void ){ char p[] =hello world; return p; }void Test( void ){ char*str = NULL; str = GetMemory(); printf( str ); }
?试题5中char p[] = hello world; return p; 的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。
试题6:
void GetMemory( char**p, int num ){ *p = (char*) malloc( num );}void Test( void ){ char*str = NULL; GetMemory( str, 100 ); strcpy( str, hello ); printf( str ); }
?试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句
*p = (char *) malloc( num );后未判断内存是否申请成功,应加上:
if ( *p == NULL ){ ...//进行申请内存失败处理}
?试题6的Test函数中也未对malloc的内存进行释放。
试题7:
void Test( void ){ char*str = (char*) malloc( 100 ); strcpy( str, hello ); free( str ); ... //省略的其它语句}
试题7存在与试题6同样的问题,在执行char *str = (char *) malloc(100); 后未进行内存是否申请成功的判断;另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:
str = NULL;
解答:剖析: 试题4~7考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确,却也绝非易事。
对内存操作的考查主要集中在:1)指针的理解;
2)变量的生存期及作用范围;3)良好的动态内存申请和释
您可能关注的文档
- 会计从业资格考试《财经法规和会计职业道德》模拟卷6.doc
- 化学:10.1《测定1mol气体体积》(3)(沪科版高二第一学期)1.ppt
- (血管和乳腺外科)外科学课程基本要求和教学大纲.doc
- (5)护理管理和医院感染管理.doc
- 《《石油和天然气地质学》试题和答案[1].doc
- :专题十一 唯物辩证法.ppt
- 《骨和关节损伤学》教学大纲.doc
- 《生活和哲学》第一、二单元漫画题专项训练.doc
- 《养生和保健》作业答案.doc
- 0Xcxffm2010年执业中药师考试大纲——中药学综合知识和技能.doc
- 2025年智能家居生产商客户提案PPT视觉系统.pptx
- 2025年环保产业工作成果总结与绿色商务风PPT设计模板.pptx
- 2025年物业装修监管法律风险防范动态PPT专题课件.pptx
- 2025年欧美动态交互式商务合作成果展示PPT内容模板.pptx
- 2025年初中数理逻辑思维训练模块化课件研发框架.pptx
- 2025年体育教师篮球运球专项培训课件模板库.pptx
- 2025年金融行业员工离职答谢会PPT金色元素装饰.pptx
- 2025年智能教育场景下大学生双创大赛PPT视觉设计.pptx
- 2025年智能设备依赖症患者的数字戒断与时间重塑计划方案.pptx
- 2025年学业压力与心理调适主题班会分层辅导策略.pptx
文档评论(0)