美文网首页iOS 知识点
(转)C/C++——strcpy函数的 几种 实现 和 详细 解

(转)C/C++——strcpy函数的 几种 实现 和 详细 解

作者: 树林里的小怪兽 | 来源:发表于2017-03-31 00:18 被阅读668次

    题目:
    已知strcpy函数的原型是:
    char * strcpy(char * strDest ,const char * strSrc);

    1. 不调用库函数,实现strcpy函数。
    2. 解释为什么要返回char*。

    方法一

    char *strcpy(char *strDest, const char *strSrc)
    {
        assert((strDest!=NULL) && (strSrc !=NULL));   
        char *address = strDest;                                         
        while( (*strDest++ = * strSrc++) != '\0' )       
              NULL ;
        return address ;                                               
    }
    

    strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?
    答:为了实现链式表达式.

    例如

    int length = strlen( strcpy( strDest, “hello world”) );
    

    方法二

    char* strcpy1(char *strDest, const char* strSrc)
    {
           assert(strSrc != NULL );
           assert(strDest != NULL);
           int i;
           char *address = strDest;
     
        for(i = 0; strSrc[i] != '\0'; i++)
                  strDest[i] = strSrc[i];
           strDest[i] = '\0';
     
           return address;
    }
    

    方法三

    char * strcpy3(char * strDest, const char * strSrc)
    {    
           if ((NULL == strDest)||(NULL == strSrc)) 
                  throw "Invalid argument(s)"; 
     
           char * strDestCopy=strDest;  
     
           while ((*strDest++=*strSrc++)!='\0');
     
           return strDestCopy;    
    }
    

    总结

    • 如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改
    • 有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。
    • 不要将正常值和错误标志混在一起返回。正常值用输出参数获得,而错误标志用return语句返回。错误信息可以用throw抛出。

    相关文章

      网友评论

        本文标题:(转)C/C++——strcpy函数的 几种 实现 和 详细 解

        本文链接:https://www.haomeiwen.com/subject/ixlmottx.html