一个标准的strcpy函数:

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

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

2分

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

  4分

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

  7分

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

  10分

//为了实现链式操作,将目的地址返回,加3分!

char * strcpy( char *strDest, const char *strSrc ) 
{
 assert( (strDest != NULL) && (strSrc != NULL) );
 char *address = strDest; 
 while( (*strDest++ = * strSrc++) != '\0’ ); 
  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函数可以作为另外一个函数的实参。

自己实现strcpy相关推荐

  1. sprintf 和strcpy 的差别

    sprintf据说是printf的孪生兄弟,在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望. sprintf 跟printf 在用法差不多,只是打印的目的地不同而已,前者打 ...

  2. strcpy +memcpy实现循环右移

    #include<stdio.h> #include<assert.h> #include<string.h> char *strcpy(char*strDest, ...

  3. strcpy,memcpy和memmove区别

    strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy ...

  4. 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove

    模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove ================================ 1 strstr 字符 ...

  5. strcpy_s与strcpy的比較

    strcpy_s和strcpy()函数的功能差点儿是一样的.strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它仅仅能假定缓冲足够大来容纳要拷贝的字符串.在程序执行时,这将 ...

  6. 转:strcat与strcpy与strcmp与strlen

    转自:http://blog.chinaunix.net/uid-24194439-id-90782.html strcat 原型:extern char *strcat(char *dest,cha ...

  7. (C++)strlen(),strcmp(),strcpy(),strcat()用法

    string.h中包含了许多用于字符数组的函数.使用前需要在程序开头加string.h©或cstring(C++)头文件 strlen() 作用:得到字符数组第一个结束符\0前的字符的个数 #incl ...

  8. Linux C中strcpy , strncpy , strlcpy 的区别

    strcpy ,strncpy ,strlcpy的用法 好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. s ...

  9. 常见面试题:重写strcpy() 函数原型

    已知strcpy函数的原型是 char* strcpy(char* strDest,const char* strSrc); 1.不调用库函数,实现strcpy函数 2.解释为什么要返回char*; ...

  10. 【C语言】模拟实现库函数 strcpy(复制字符串内容) 与 strlen(求字符串长度)

    前言:对于库函数的使用,我们不仅要会使用方法,更要知晓使用原理,而知晓使用原理最好的方法就是模拟相应库函数的使用. 今天我们就来模拟 strcpy(复制字符串内容) 与 strlen(求字符串长度)这 ...

最新文章

  1. 给每个函数写一个记录日志的功能.
  2. solr多core的处理
  3. sidhu眼中的CoordinatorLayout.Behavior(二)
  4. poj 3378 Crazy Thairs
  5. CAD—定义委托异步添加实体
  6. C言语实现半隐式Euler解常微分方程(附完整源码)
  7. Anaconda安装更新库
  8. js基础---js组成以及基本认知
  9. 猫:君主般的眼神 监视领地。 狗
  10. Node.js学习准备篇
  11. html window设置,JavaScript Window
  12. 关于在Eclipse里面启动了服务,但是localhost:8080无法访问的问题:
  13. 汇编语言软件延时1s
  14. 图像读取函数cv::imread()的几种使用方式
  15. ANC主动降噪技术的原理
  16. java文档生成器_最好用的数据库文档生成工具
  17. php自动加载比直接加载慢,php之自动加载(懒加载)
  18. 需求分析说明书、概要设计说明书、详细设计说明书部分样例
  19. 搜索引擎优化核心关键词策略
  20. 阿里云ESC搭建SVN服务端-----实测有效,并补充了一些坑点

热门文章

  1. 0225互联网新闻 | 《绿皮书》获奥斯卡最佳影片;华为发布5G折叠屏手机Mate X
  2. 你将被重新带回到 那个燃烧彼此的世界
  3. 服务端开发学习路径图,心疼小哥哥们
  4. ES6中的模板字符串---反引号``
  5. 当前安卓App加固到底该如何做到防篡改?
  6. PB级分布式大数据的处理和分析应用
  7. 银行营业网点管理系统——Servlet包(CityAreaServlet )
  8. 一次发现underscore源码bug的经历以及对学术界『拿来主义』的思考
  9. 【数据结构】数组和广义表
  10. 四屏带缩略图JS幻灯片