已知strcpy函数的原型是
char *strcpy(char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不调用C++/C的字符串库函数,请编写函数 strcpy
char *strcpy(char *strDest, const char *strSrc)
{
assert((NULL!=strDest) && (NULL!=strSrc)); // 2分
char *address = strDest; // 2分
while( (*address++ = * strSrc++) != '\0' ) // 2分
NULL ;
return strDest; // 2分
}
首先是断言的使用,我自己习惯了直接用if判断两个是否为空,然后也没有做异常处理。其次是在内部重新定义一个新指针等于strDest,这样当返回strDest的时候,指针不是指向最后一个\0字符了。细节啊,while( (*strDest++ = * strSrc++) != '\0' )这里其实很多人看不出来,把最后的\0也拷贝过来了,这也是必须的。关于NULL!=strDest这个NULL最好放在前面的习惯,这个参考C++编程规范吧,个人习惯。