一个标准的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 );
}
但是 return( dst );到底有神马作用?

考虑:

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

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

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

转载于:https://www.cnblogs.com/elisha-blogs/p/4125799.html

strcpy完整版 与 strcpy为什么有返回值相关推荐

  1. ASCII码表完整版(0 - 255)

    目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准 ...

  2. C++中内存分配、函数调用和返回值问题

    在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题. C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量.数据区 ...

  3. 浅谈C++中内存分配、函数调用和返回值问题

    在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题. C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量.数据区 ...

  4. c++ return返回值与内存

    在学习函数的时候,发现有些函数返回一个变量,有些返回引用,有些返回指向当前对象的指针,深入挖掘,发现这牵扯到内存相关的东西 1.内存 如下图:32位X86机器的内存布局图,内存主要分为栈.堆.BSS段 ...

  5. 实现strcpy的几种操作 与 strcpy为什么有返回值

    目录 总结: 下面给出网上strcpy的得分版本: strcpy函数返回值有神马作用? 总结: 1.输入参数src加上const 2.考虑输入指针的合法性 3.考虑返回值 一个标准的strcpy函数: ...

  6. iOS求职之OC面试题完整版---持续更新中...

    1.Objective-C的类可以多重继承么?可以采用多个协议么? 答:不可以多重继承,可以采用多个协议,Objective-C本身也并不支持抽象基类. 2.#import和#include的区别是什 ...

  7. 宿舍管理程序c语言,学生宿舍管理软件C语言源代码完整版

    <学生宿舍管理软件C语言源代码完整版>由会员分享,可在线阅读,更多相关<学生宿舍管理软件C语言源代码完整版(8页珍藏版)>请在人人文库网上搜索. 1.源程序代码:#includ ...

  8. 【Android】JNI调用(完整版)

    原文出处:http://blog.csdn.net/kangyaping/article/details/6584027#t0 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... ...

  9. C语言入门基础知识【完整版】

    目录 一.数据类型和表达式 1.基本类型 2.构造类型 1)数组类型 2)[结构体类型](#jiegou) 3)[共用体类型](#lianhe) 3.常量 4.运算表达式 1)算术运算表达式: 2)关 ...

最新文章

  1. js 多个定时器_从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理(二)
  2. js给php注册网页添加实时监听,js 实现watch监听数据变化的代码
  3. 你们的蛙儿子成马云儿子了 阿里巴巴获得《旅行青蛙》独家代理权
  4. a卡显存测试软件_官方游戏性能堪比RTX 3080 苏姿丰:RX 6000 Big Navi是史上最强A卡...
  5. android系统里面的mic是哪个app_安利 | 那些错过会后悔一年的法语APP
  6. 前端学习(2732):重读vue电商网站42之添加富文本编辑器
  7. 【HDU - 6231】K-th Number(二分,思维)
  8. 【华为云技术分享】Linux内核补丁源码分析(1)
  9. 如何自动维护全文索引和目录
  10. uip UDP 服务器广播模式(客户端可以任意端口,并且主动向客户端发送数据) (转)...
  11. while(条件) 语句;语句 容易理解错的一点
  12. 深入学习华为云IOT云平台与LiteOS轻量级物联网系统
  13. 三对角阵的一维数组表示
  14. Java期末考试题(个人押题版)
  15. 使用NRF52xx sniffer抓取BLE包
  16. 事故赔付额年降高达7成,所托瑞安打造商用车智能驾驶商业化样本
  17. 数据库:实验五MySQL数据库对象-(视图、索引)
  18. 2022年CSDN粉丝总数前100名博主
  19. sql中的大于小于等于的表示
  20. thinkphp6 通过命令行快速生成多应用模块报 【Command “build“ is not defined.】错误的解决办法

热门文章

  1. 基于Spring Boot的Logback日志轮转配置
  2. 面向过程和面向对象的本质理解
  3. Agent编程平台的实现
  4. Python程序-离散和线性图形
  5. [cocos2d-x]屏幕自适应解决的方法
  6. xmpp 常见错误 一
  7. html时间自动,编辑自动结束时间.html
  8. html个人博客完整代码_hexo | 不用写代码,2小时快速搭建个人博客
  9. 01章.计算机网络概述(1.1~1.6)
  10. linux入门_Linux入门的10种方法