51CTO下载-C程序员面试题(2)

2021-09-24 17:19

return NULL ;

if ( strDest == strSrc)

return strDest ;

char *tempptr = strDest ;

while( (*strDest++ = *strSrc++) != ‘/0’)

;

return tempptr ;

}

挺好的 程序员可以用哈

2 分

void strcpy( char *strDest, char *strSrc )

{

while( (*strDest++ = * strSrc++) != ‘\0’ );

}

4 分

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 != NULL) );

while( (*strDest++ = * strSrc++) != ‘\0’ );

}

找错题答案:

试题4 传入中GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改

变传入形参的值,执行完

char *str = NULL;

GetMemory( str );

后的str 仍然为NULL;

试题5 中

char p[] = "hello world";

return p;

的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,

其根源在于不理解变量的生存期。

试题6 的GetMemory 避免了试题4 的问题,传入GetMemory 的参数为字符串指针的指针,但是在

GetMemory 中执行申请内存及赋值语句

*p = (char *) malloc( num );

挺好的 程序员可以用哈

后未判断内存是否申请成功,应加上:

if ( *p == NULL )

{

...//进行申请内存失败处理

}

试题7 存在与试题6 同样的问题,在执行

char *str = (char *) malloc(100);

后未进行内存是否申请成功的判断;另外,在free(str)后未置str 为空,导致可能变成一个“野”指

针,应加上:

str = NULL;

试题6 的Test 函数中也未对malloc 的内存进行释放。

剖析:

试题4~7 考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60 的

错误。但是要完全解答正确,却也绝非易事。

对内存操作的考查主要集中在:

(1)指针的理解;

(2)变量的生存期及作用范围;

(3)良好的动态内存申请和释放习惯。


51CTO下载-C程序员面试题(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:弘德语言文化培训学校2011年管理岗位培训

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: