不调用C/C++的字符串库函数,请编写函数strcpy

来源:互联网 发布:抠抠视频秀算法注册机 编辑:程序博客网 时间:2024/05/29 04:41

这个题目可以说是老生常谈了,每次笔试都会遇到,每次都觉得自己做得很好,可是瑕疵真不少。幸好有面试睿智融科的前辈,对我悉心指出来其中的漏洞,非常感谢。

已知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++编程规范吧,个人习惯。


0 0