c语言strcpy函数 内部分配,C语言strcpy函数实现.

看面试题的时候有个题目是不使用库函数,实现strcpy函数.(字符串拷贝函数)

这个是我写的代码,在机器上编译过了.

void my_strcpy(char *t,char *s){while((*t++=*s++));

}

看了很多帖子,发现我这个代码的问题还是很多的.即使这么简单的一个小程序也有很多的东西需要考虑.下面总结:

1.关于函数返回值.我写的是void,即函数不返回参数.所以我这个函数的唯一目的是将s地址字符串复制到t上.不返回任何信息.这样写的代码在以后使用是不方便的.林锐里提到:返回char

*的目的是为了实现链式表达式.如:

int length=strlen(strcpy(strDest,"HelloWorld"));//如果没有返回char *那么要多写几行代码非常麻烦.

2.保留原串的问题.

正因第一个错误犯下导致了第二个错误的直接产生,那就是保留目标串首地址的问题.既然要返回目标串的话肯定是返回目标串的首地址.即return

t.而在函数里对t要进行地址移动操作,所以在开始要保存t的地址.

char *strDest=t; //t的地址保留在strDest,这样直接返回strDest即可,而可以操作t.

3.关于源串,目标串的检查问题.

这个主要是检查源串,目标串指针的合法性.

assert((t!=NULL) && (s!=NULL)); //如果t,s均!=NULL那么就继续执行,如果不是的话并退出程序并输出错误信息.

这样一来,比较合格的strcpy()函数完成:(这个也是林锐博士在高质量C/C++编程当中的源代码)

char *my_strcpy(char *t,char *s){char *strDest=t;

assert((*t)!=NULL && (*s)!=NULL);while((*t++=*s++));returnstrDest;

}

其实在GNU C的strcpy源代码当中并没有对串指针合法性的检测.看了网上帖子大家争论的原因是:assert()这个函数非常的繁琐耗时.所以GNU

C是为了提高效率,而且本意是如果出错则程序会crash,而检查crash则是程序员慢慢调试.库函数则是以效率为先!

原文:http://www.cnblogs.com/brillliu/p/3548866.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光端机需要成对使用吗?

有些新客户坏了一个其他品牌的设备,想买一个设备去替换,总会来质询,“光端机要成对使用吗?”。答案是对的,其实光端机要成对使用的。光端机是用在以光纤作为载体的光、电传换器。发送端和接收端必须是同一种设备。那么…

LoRa 和NB-IoT 那个才是智慧停车低成本的最佳选择

随着现在城市发展,人们的生活水平也是在逐渐的提高,并且大部分的家庭也是配备了汽车,但是一说到停车这个话题,尤其是大城市不得不说停车难的问题。因为停车问题的逐渐发酵,所以智慧停车也就因运而生了。 智慧停车发展潜…

vert.x_选择Vert.x的3个理由

vert.xVert.x是用于JVM的轻量级高性能应用程序平台 现代Web应用程序和移动客户端的兴起重新定义了Web服务器的期望。 Node.js是第一个识别范式转换并提供解决方案的技术。 应用程序平台Vert.x继承了Node.js的一些创新,并使其在JVM上可用,将新鲜的想法与…

工业以太网交换机可以家用吗?

工业交换机也称作工业以太网交换机,即应用于工业控制领域的以太网交换机设备,由于采用的网络标准,其开放性好、应用广泛以及价格低廉、使用的是透明而统一的TCP/IP协议,以太网已经成为工业控制领域的主要通信标准。 工业交换机具…

自考c语言程序阅读题,自考C语言程序设计模拟试题二答案.DOC

本资料由广州自考网收集整理,更多自考资料请登录 HYPERLINK "http://www.gzzk.cc" www.gzzk.cc下载再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。 第 PAGE 1 页 (共 NUMPAGES 3 页)自考“C语言程序设计”模…

lora近几年发展的具体介绍

大家好,我是LoRa,以下是我的“名片”: 经过过去几年的成长,相信大家对我已经有了比较深入的了解了,毕竟我也算在业界打出知名度了。 但是,经过了解发现发现很多业界人士对我仍然存有误解,因此我希望通过本文…

TOF测距功能的原理及使用方法

一、飞行时间测距法TOF(time-of-flight)测距方法 该方法属于双向测距技术,利用数据信号在一对收发机之间往返的飞行时间来测量两点间的距离。将发射端发出数据信号和接收到接收端应答信号的时间间隔记为Tt,接收端收到发射端的数据信号和发出应…

c语言二维数组教材分析,C语言《二维数组》说课稿.docx

《二维数组》说课稿一、教学目标通过本次课教学,学生能进一步理解二维数组的定义,二维数组的引用的方 法;掌握二维数组的初始化技能目标:培养学生逻辑思维能力、综合运用知识的能力和自主学习能力; 二、教材分析选用教…

Java –从列表中删除所有空值

介绍: 在本文中,我们将学习如何使用普通的Java,Java 8 lambda表达式和某些第三方库从Java 列表中删除空值 。 所以,让我们开始吧! 从Java中的 让我们探索从Java 列表中删除null的不同方法: 1. Java 7或更…

飞畅科技关于网管型环网交换机的工作原理介绍

现如今,随着通信产业的发展和国民经济信息化的发展,管理型环网交换机市场稳步增长。 它的成本效益高,高度灵活性,相对简单并且易于实施。 以太网技术已成为当今重要的LAN网络技术,并且管理型环网交换机已成为人们深受欢…

无线数传在桥梁检测中传感器信号的采集应用

桥梁检测是利用传感器感受被测物体的物理量信号,并将感受到的信号,按一定的规律转换为电信号输出;然后使用自动采集装置采集传感器的电信号,并使用无线数据传输模块将数据上传到远端服务器上,以满足信息的处理、存储、…

交换机该选择千兆还是百兆的呢?

为能负载现在越来越复杂的视频监控系统网络,交换机需要接入的摄像头数量也就越多,交换机的数据量就越大,交换机必须具备非常稳定的转换数据的能力来传输大量而又持续的视频数据。那么,交换机该选择千兆还是百兆的呢?接…

c语言减去随机数为负数,scratch教程:随机数和负数的概念

记得在之前的兴趣课程里面有提到过几个随机数和负数的概念,对于很多刚刚接触编程的小朋友可能还不知道什么是随机数、什么是负数?先说概念随机数是专门的随机试验的结果。 随机数最重要的特性是:它所生成的后面的那个数与前面的那个数毫无关系。通俗的讲…

CC1310射频芯片的433M无线模块设计

1、特点 CC1310是TI公司最新推出的高效型/超低功耗无线MCU中低于1GHz系列器件的重要器 件。极低的有源RF和MCU电流以及低功耗模式流耗可确保电池的使用寿命,允许在能源采集应用中使用小型纽扣电池。 CC1310器件在支持多个物理层和RF标准的平台中将灵活的超低功耗RF收…

电源模块的9个主要性能指标及其作用

一、电源模块的作用和优势 电源模块是电压转换设备之一,它的主要功能是将交流电和直流电相互转换,除此之外,它还具有维护方便,设计灵活,节省成本和时间,高功率,高效率和高可靠性的优点。 在某种…

飞畅科技教你如何选择合适的PoE交换机?

PoE交换机除了具备普通交换机的功能外,还具备有PoE供电功能,可以给网络摄像机(IPC)、无线AP等网络设备供电,从而让它们免去了繁杂的电源布线。选择合适的PoE交换机就需要注意以下要点: 1、供电标准 确定受…

电源模块怎么选?以下6点你都知道吗?

1、查看电源模块的电路设计原理与过程 电源电路的设计原理往往需要专业人员来辨别区分,但市场上电源模块大致分为裸板和灌封。 裸板式电源模块:裸板比灌封更加直观明了,可以从表面查看电子元器件的布局合理有序、焊锡灯美观等。 灌封式电源…

天线的安装对通信效果有什么影响?

上周我们介绍的天线的基础知识,今天亿佰特为大家介绍一下天线的安装队通信效果的影响。随着科技的发展,无线通信越来越深入我们的工作和生活中,同时天线也变成了我们生活中最常见的物品。 天线是一种能量变换器,它把传输线上传播的…

工业以太网交换机常见故障排除的三种方法

工业以太网交换机是组网中的重要设备,如果其出现问题将会影响到整个网络体系,局域网中的计算机往往都是连接到交换机设备上,并通过该设备进行相互交换、处理数据的,可以这样说,交换机工作状态的好坏会对局域网网络的整…

【渝粤教育】国家开放大学2018年秋季 0691-21T物理化学及实验 参考试题

试卷编号:0695 2018—2019学年度第1学期期末考试 《农业企业经营管理》试题答案 1、农业企业产品质量控制:指农业企业通过采取一系列作业技术和活动对产品质量形成的各个过程实施控制,包括原材料的采购、生产过程的控制、储运过程控制、包装…