zoukankan      html  css  js  c++  java
  • strcpy完整版 与 strcpy为什么有返回值

    一个标准的strcpy函数:

    原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了。

    下面给出网上strcpy的得分版本:

    2分

    void strcpy( char *strDest, char *strSrc )
    {
    while( (*strDest++ = * strSrc++) != '’ );
    }

    4分

    void strcpy( char *strDest, const char *strSrc ) 
    //将源字符串加const,表明其为输入参数,加2分
    {
    while( (*strDest++ = * strSrc++) != '’ );
    }

    7分

    void strcpy(char *strDest, const char *strSrc) 
    {
    //对源地址和目的地址加非0断言,加3分
    assert( (strDest != NULL) && (strSrc != NULL) );
    while( (*strDest++ = * strSrc++) != '’ );
    }

    10分

    //为了实现链式操作,将目的地址返回,加3分!
    char * strcpy( char *strDest, const char *strSrc ) 
    {
    assert( (strDest != NULL) && (strSrc != NULL) );
    char *address = strDest; 
    while( (*strDest++ = * strSrc++) != '’ ); 
    return address;
    }

    关键是:

    为了实现链式操作,将目的地址返回

    strcpy函数返回值有神马作用?

    看看微软的代码:

    char * __cdecl strcpy(char * dst, const char * src)
    {
            char * cp = dst;
            while( *cp++ = *src++ )
                    ;               /* Copy src over dst */
            return( dst );
    }
    但是 return( dst );到底有神马作用?

    考虑:

    int length = strlen( strcpy(str, “Hello World”) );
    你就能发现奥秘了。为了实现链式操作,将目的地址返回  原来说的就是这么一会事:

    Strcpy函数可以作为另外一个函数的实参。

    声明:转载自 http://blog.163.com/xiangzaihui@126/blog/static/166955749201182695220753/

  • 相关阅读:
    第6课.内联函数分析
    第5课.引用的本质分析
    第4课.布尔类型和引用
    第3课.进化后的const
    第2课.C到C++的升级
    c语言深度解剖(笔记)
    你必须知道的495个c语言问题(笔记)
    JS弹出框
    车牌号正则表达式
    input输入文字后背景色变成了黄色 CSS改变(去掉黄色背景)
  • 原文地址:https://www.cnblogs.com/elisha-blogs/p/4125799.html
Copyright © 2011-2022 走看看