分类:
2011-10-05 21:58:57
原文地址:高频笔试题strcpy()的写法 作者:zhuliting
题目:已知strcpy函数的原型是
1 | char * strcpy(char * strDest, const char * strSrc); |
解说:
1. strcpy的实现代码
1 | char * strcpy(char * strDest,const char * strSrc) |
2 | { |
3 | if ((strDest==NULL)||(strSrc==NULL)) //[1] |
4 | throw "Invalid argument(s)"; //[2] |
5 | char * strDestCopy=strDest; //[3] |
6 | while ((*strDest++=*strSrc++)!='\0'); //[4] |
7 | return strDestCopy; |
8 | } |
错误的做法:
一
二
三
四
返回strDest的原始值使函数能够支持链式表达式,增加了函数的"附加值"。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。 链式表达式的形式如:
1 | int iLength=strlen(strcpy(strA,strB)); |
又如:
1 | char * strA=strcpy(new char[10],strB); |
返回strSrc的原始值是错误的。其一,源字符串肯定是已知的,返回它没有意义。其二,不能支持形如第二例的表达式。其三,为了保护源字符串,形参用const限定strSrc所指的内容,把const char *作为char *返回,类型不符,编译报错。