zoukankan      html  css  js  c++  java
  • @清晰掉 string.h之基础堵漏

    一个标准的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 );
    }
    发现微软的代码很简单,bug一堆是吧?但是 return( dst );到底有神马作用?

    考虑:

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

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

    strcat();等函数也是类似.

  • 相关阅读:
    jQuery:一些小练习
    jQuery
    JavaWeb:笔记(三)
    JavaWeb:笔记(二)
    JavaWeb:笔记(一)
    JavaWeb:文件的上传下载
    JavaWeb:Listener
    基于RRT的机器人自主探索建图
    OpenNI2安装
    g2o初始化一些
  • 原文地址:https://www.cnblogs.com/ysdu/p/4762359.html
Copyright © 2011-2022 走看看