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

题目:
已知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抛出。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 史上最全的iOS面试题及答案 迷途的羔羊--专为路痴量身打造的品牌。史上最精准的定位。想迷路都难!闪电更新中......
    南虞阅读 1,562评论 0 8
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,401评论 0 6
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,813评论 2 37
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,023评论 0 7
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,767评论 0 4