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/

  • 相关阅读:
    推荐一篇好文加上一些补充
    我也来写一个俄罗斯方块
    使用canvas绘制一个时钟
    断句:Store all parameters but the first passed to this function as an array
    Observer Pattern
    web worker 的 self
    练练断句
    as 什么意思?
    natively 在本地机器
    in mind (不是 切记 的意思)
  • 原文地址:https://www.cnblogs.com/elisha-blogs/p/4125799.html
Copyright © 2011-2022 走看看