C-C++程序员常见面试题一

上传人:人*** 文档编号:463954526 上传时间:2022-08-02 格式:DOCX 页数:18 大小:11.21KB
返回 下载 相关 举报
C-C++程序员常见面试题一_第1页
第1页 / 共18页
C-C++程序员常见面试题一_第2页
第2页 / 共18页
C-C++程序员常见面试题一_第3页
第3页 / 共18页
C-C++程序员常见面试题一_第4页
第4页 / 共18页
C-C++程序员常见面试题一_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《C-C++程序员常见面试题一》由会员分享,可在线阅读,更多相关《C-C++程序员常见面试题一(18页珍藏版)》请在金锄头文库上搜索。

1、C/C+程序员常见面试题一试题1:void test1()(char string10;char* str1 =0123456789strcpy( string, str1 );试题2:char string10, str110;int i;for(i=0; i10; i+)(str1i = a;)strcpy( string, str1 );)试题3:char string10;if( strlen( strl ) = 10 )(strcpy( string, str1 );试题1字符串str1需要11个字节才能存放下(包括末尾的0),而string只有10个字节的空间,strcpy会导致数

2、组越 界;对试题2,如果面试者指由字符数组str1不能在数组内结束可以给3分;如果面试者指由strcpy(string, strl)调用使得从strl内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指由库函数strcpy工作方式的给10分;对试题 3, if(strlen(str1) = 10)应改为 if(strlen(str1) 10),因为strlen的结果未统计0所占用的1个字节。剖析:考查对基本功的掌握:字符串以0结尾;(2)对数组越界把握的敏感度;(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给由几个不同得分的

3、答案:2分void strcpy( char *strDest, char *strSrc )(while( (*strDest+ = * strSrc+) != 0);void strcpy( char *strDest, const char *strSrc )将源字符串加const,表明其为输入参数,加 2分(while( (*strDest+ = * strSrc+) != 0);)7分void strcpy(char *strDest, const char *strSrc)(/对源地址和目的地址加非0断言,加3分assert( (strDest != NULL) & (strSrc

4、 != NULL);while( (*strDest+ = * strSrc+) != 0);)10分为了实现链式操作,将目的地址返回,加 3分!char * strcpy( char *strDest, const char *strSrc )(assert( (strDest != NULL) & (strSrc != NULL);char *address = strDest;while( (*strDest+ = * strSrc+) != 0);return address;)从2分到10分的几个答案我们可以清楚的看到,小小的 strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎

5、实 的基本功才能写一个完美的 strcpy啊!对strlen的掌握,它没有包括字符串末尾的0读者看了不同分值的strcpy版本,应该也可以写由一个10分的 strlen 函数了,完美的版本为:int strlen( const char *str )输入参数constassert( strt != NULL ); /断言字符串地址非 int len;while( (*str+) !=0)(len+;)return len;)试题4:void GetMemory( char *p )(p = (char *) malloc( 100 );)void Test( void )(char *str

6、= NULL;GetMemory( str );strcpy( str, hello world );printf( str );试题5:char *GetMemory( void )(char p=hello worldreturn p;void Test( void )char *str = NULL;str = GetMemory();printf( str );)试题6:void GetMemory( char *p, int num )*p = (char *) malloc( num );void Test( void )(char *str = NULL;GetMemory( &

7、str, 100 );strcpy( str, hello );printf( str );试题7:void Test( void )char *str = (char *) malloc( 100 );strcpy( str, hello );free( str );省略的其它语句)解答:试题4传入中GetMemory( char *p )函数的形参为字符串指 针,在函数内部修改形参并不能真正的改变传入形参的值, 执行完char *str = NULL;GetMemory( str );后的str仍然为NULL ;试题5中char p = hello world ” ;return p;的p

8、数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。试题6的GetMemory避免了试题 4的问题,传入GetMemory 的参数为字符串指针的指针, 但是在GetMemory中执行申请 内存及赋值语句*p = (char *) malloc( num );后未判断内存是否申请成功,应加上:if ( *p = NULL )进行申请内存失败处理试题7存在与试题6同样的问题,在执行char *str = (char *) malloc(100);后未进行内存是否申请成功的判断;另外,在 free(str)后未置str为空,导致可能变成一

9、个野”指针,应加上:str = NULL;试题6的Test函数中也未对 malloc的内存进行释放。剖析:试题47考查面试者对内存操作的理解程度,基本功扎实 的面试者一般都能正确的回答其中5060的错误。但是要完全解答正确,却也绝非易事。对内存操作的考查主要集中在:(1)指针的理解;(2)变量的生存期及作用范围;(3)良好的动态内存申请和释放习惯。再看看下面的一段程序有什么错误:swap( int* p1,int* p2 )(int *p;* p = *p1;* p1 = *p2;* p2 = *p;)在swap函数中,p是一个 野”指针,有可能指向系统区,导致程序运行的崩溃。在VC+中DEBUG 运行时提示错误“ Access Violation。该程序应该改为: swap( int* p1,int* p2 )int p;p = *p1;*p1 = *p2;*p2 = p;)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号