C语言编写字符串拷贝(strcpy)函数详解以及assert函数

article/2025/9/30 6:14:12

目录

一.strcpy函数

原型声明

功能

说明

代码及运行结果

 二.自己编写strcpy函数

代码一及运行结果

 代码二(改进)及运行结果

代码三(进一步改进)及assert函数

在这里解释一下什么是asser函数(断言函数)

举个简单例子

代码四(最终改进)


一.strcpy函数

原型声明

char *strcpy(char* dest, const char *src);

功能

把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间,也就是把含有转义字符'\0'即空字符作为结束符,把这之前的内容复制到dest中。

说明

src和dest所指内存区域不可以重叠目dest必须有足够的空间来容纳src的字符串。如果目标数组dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。头文件:#include <string.h>和#include <stdio.h>

代码及运行结果

#include<stdio.h>
#include<string.h>
int main()
{char arr1[]="############";char arr2[]="hello world!";printf("arr1: %s\n",arr1);strcpy(arr1,arr2);printf("把arr2中的内容赋值到arr1中去,arr1:%s",arr1);return 0;
}

结果是:

 

 二.自己编写strcpy函数

代码一及运行结果

写一个while循环,只要src没有达到‘\0’,就一直把src的内容赋值给dest,然后不断++操作就可以了

#include<stdio.h>
#include<string.h>
void my_strcpy(char* dest,char* src)
{while(*src!='\0'){*dest=*src;dest++;src++;}*dest=*src;//把'\0'也传过去
}
int main()
{char arr1[]="############";char arr2[]="hello world!";my_strcpy(arr1,arr2);printf("arr1: %s\n",arr1);return 0;
}

运行结果:

 代码二(改进)及运行结果

还可以对代码一中的循环进行改进,使代码更简洁

#include<stdio.h>
#include<string.h>
void my_strcpy(char* dest,char* src)
{while(*dest++=*src++)//在这里把‘\0’也传过去了{;}
}
int main()
{char arr1[]="#################";//这里有17个#char arr2[]="hello world!";my_strcpy(arr1,arr2);printf("arr1: %s\n",arr1);printf("%d %d\n",sizeof(arr1),strlen(arr1));return 0;
}

运行结果:

 这里为了让大家更能够理解发生了什么,我还分别输出了:sizeof(arr1)和strlen(arr1)的结果,我们发现,sizeof(arr1)的结果是18,strlen(arr1)的结果是12,所以说我们就知道,arr1数组经过函数变化后它的结果是这样的“hello world!\0######”,这样才会输出sizeof(arr1)的结果是18,strlen(arr1)的结果是12,因为strlen函数会输出以'\0'为结束字符前面的字符个数。

代码三(进一步改进)及assert函数

我们希望dest或者src如果他们输入不符合规则能够停止运行

#include<stdio.h>
#include<string.h>
#include<assert.h>
void my_strcpy(char* dest,char* src)
{assert(dest !=NULL);//断言assert(src !=NULL);//断言while(*dest++ = *src++)//在这里把‘\0’也传过去了{;}
}
int main()
{char arr1[]="#################";//这里有17个#char arr2[]="hello world!";my_strcpy(arr1,arr2);printf("arr1: %s\n",arr1);printf("%d %d\n",sizeof(arr1),strlen(arr1));return 0;
}

在这里解释一下什么是asser函数(断言函数)

断言函数,用于在调试过程中捕捉程序的错误。在编程中是指对某种假设条件进行检测,如果条件成立就不进行任何操作,如果条件不成立就捕捉到这种错误,并打印出错误信息,终止程序执行。但是需注意:频繁的调用assert会极大的影响程序的性能,增加额外的开销。

举个简单例子

我们用被除数不能为0写一个代码看看
 

#include<stdio.h>
#include<assert.h>
int main()
{int a,b;scanf("%d %d",&a,&b);assert(b!=0);int c=a/b;printf("c=%d",c);
}

assert(b!=0),就是在这里规定b不能为0,如果为0就报错终止执行,我们看看结果
   

 

代码四(最终改进)

我们有时候会把dest和src两个的顺序搞混,我们注意到strcpy函数原型

 src前面自带一个const,使其变成常变量,这样就可以保证就算dest和src两者的顺序写反了,也不会出现将dest中的内容赋值到src中去

#include<stdio.h>
#include<string.h>
#include<assert.h>
void my_strcpy(char* dest,const char* src)
{assert(dest !=NULL);//断言assert(src !=NULL);//断言while(*dest++ = *src++)//在这里把‘\0’也传过去了{;}
}
int main()
{char arr1[]="#################";//这里有17个#char arr2[]="hello world!";my_strcpy(arr1,arr2);printf("arr1: %s\n",arr1);printf("%d %d\n",sizeof(arr1),strlen(arr1));return 0;
}

 用const就可以避免拷贝的方向、去处错误,保证了src不变,所以只能将src的内容拷贝到dest,而不能把dest里面的内容拷贝到src


http://chatgpt.dhexx.cn/article/9CPcdu8Q.shtml

相关文章

程序员一般通过什么平台接单

今天给大家介绍几个程序员可以接私活的平台。在外人眼中,程序员敲几行代码就能拿到不错的薪水,理所应当需要掌握与计算机方面相关的技术;私活没有那么好做,但是可以作为一个额外的收入渠道,或者想要找项目练手的程序员,都乐意利用自己的业余时间接私活。 1、程序员客栈 …

福利:总结10个Python赚钱的接单平台!兼职月入5000+

如果说当下什么编程语言最靠谱或者比较适合搞副业&#xff1f; 答案肯定100%是&#xff1a;Python Python是所有语法中最简单易上手的语言&#xff0c;不需要特别的的英语词汇量&#xff0c;逻辑思维也不需要很差就能上手。而且学会了之后就能编写代码爬取各种数据&#xff0c…

大一学生靠爬虫接单月入上万?这些接私活的外包平台分享给你!让你外包接到手软!

概叙 今天听一个同事说起他弟弟&#xff0c;同事他暑假教了两个月的python爬虫&#xff0c;也告诉他怎么接外包赚钱&#xff0c;本意是想他自己能在校给自己赚点生活费&#xff0c;不曾想到一月居然能赚这么多&#xff01;毕竟有了技术的话&#xff0c;除了工作上的&#xff0c…

程序员怎么接单赚外快,去这6个平台就可以了!

前言 说起程序员接外包的网站&#xff0c;你在网上一搜发现数不胜数&#xff0c;但真正有用的却很少。然后你想快速的找到几个靠谱的网站&#xff0c;去看了看接外包的攻略&#xff0c;你会发现排雷的又数不胜数。一时间你还真不知道要选哪一个。 接下来小编就为大家推荐几个…

福利:总结几个Python赚钱的接单平台,兼职月入5000+

如果说当下什么编程语言最靠谱或者比较适合搞副业&#xff1f; 答案肯定100%是&#xff1a;Python Python是所有语法中最简单易上手的语言&#xff0c;不需要特别的的英语词汇量&#xff0c;逻辑思维也不需要很差就能上手。而且学会了之后就能编写代码爬取各种数据&#xff0…

基于安卓的接的快接单平台/基于Android的快的接单平台

【摘要】 随着互联网的趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己的信息推广出去&#xff0c;最好方式就是建立自己的平台信息&#xff0c;并对其进行管理&#xff0c;随着现在智能手机的普及&#xff0c;人们对于智能手机里面的应用接的快接单平台也在不断的使用…

程序员的接单外卖平台

今天王同学给大家安利一款非常实用并且能接单的一款非常好的平台—— 独自开 独自开的功能非常之多 简直不要太香~ 集成第三方数学接口&#xff0c;形成标准化解决方案&#xff0c;提供开发者调用 支付分账功能电子签单功能税务接口硬件接口 独自开的开发功能简直不要太多~ 如…

效果图制作接单平台有哪些?

对于制图师来说&#xff0c;单子就是生命&#xff0c;就是白花花的票子&#xff0c;单子越多&#xff0c;票子越多。一般来说找单子不会是制图师来找&#xff0c;都是公司的商务拉来单子&#xff0c;制图师们只管出活&#xff0c;但如果想要更高的收入&#xff0c;想跳过层层转…

程序员接私活,接单平台

面向国内企业接单&#xff0c;主要好处就是对英语沟通能力的要求没那么高&#xff0c;不过客户屁事多&#xff0c;不懂装懂&#xff0c;需求来回改&#xff0c;喜欢瞎 bb&#xff0c;回款周期长的问题也普遍存在。 因此&#xff0c;我个人觉得&#xff0c;面向国内市场接单&am…

Java程序员接单平台推荐

Java程序员接单已经不再是新鲜事&#xff0c;也有不少学Java的兄弟通过接单得到了不错的收入&#xff1b;生活在二三线的程序员老铁们&#xff0c;靠接单也可以对等一线城市的收入。具体该怎么做&#xff0c;且听我娓娓道来。 (干货满满&#xff0c;建议大家点赞收藏&#xff…

常用Java接单平台一览

不少主攻Java的程序员兄弟除了工作&#xff0c;还会在空闲时间选择接单来增加自己的收入&#xff1b;对于那些生活在二三线的程序员兄弟们&#xff0c;通过接单&#xff0c;来获得与一线城市对等的收入。具体该怎么做&#xff0c;且听我娓娓道来。接下来干货满满&#xff0c;先…

那些你必须要知道的程序员接单平台

作为程序员来说&#xff0c;我们进行的大多数都可以在网络上进行&#xff0c;所以对于接单来说是非常方便的&#xff0c;起码你不需要千里迢迢跑到另外一个城市去进行一份兼职。所以说在闲暇时间动动手指&#xff0c;接几个单子增加点业余收入&#xff0c;也丰富一下自己的经验…

盘点六大程序员接单网站,务必收藏!

程序员接单不是啥新鲜事儿&#xff0c;不少程序员在工作之余会找一点单子来做&#xff0c;进而在二三线城市就拿到对标一线城市的薪资。 有的程序员会上论坛和一些接单群去找单子做&#xff0c;但是一般来说这种的工资会比较低&#xff0c;而且由于没有第三方的保障&#xff0c…

接单平台强烈推荐汇总

&#xff08;1&#xff09;程序员客栈 https://www.proginn.com/ &#xff08;10&#xff09;码市 https://codemart.com/ &#xff08;11&#xff09;猪八戒网 https://luoyang.zbj.com/ &#xff08;100&#xff09;开源众包 https://zb.oschina.net/ &#xff08;101&am…

服务器管理工具

文章目录 终端模拟&#xff08;Xshell 6&#xff09;安装配置 服务器文件传输&#xff08;WinSCP&#xff09;安装配置 终端模拟&#xff08;Xshell 6&#xff09; 安装 链接&#xff1a;https://pan.baidu.com/s/1aXPxtbpwxblfAwgdnQaZyQ 提取码&#xff1a;62qe 配置 新建…

世界上最好用的FTP服务器管理工具

1、服务器端&#xff1a;serv-u 2、客户端&#xff1a;FileZilla

云服务器管理

目录 使用云服务器的三大好处 什么是云服务器 一分钟快速定制ECS 三分钟便捷管理ECS 五分钟轻松运维ECS 运维场景一&#xff1a;使用ECS快照功能恢复误删的数据 运维场景二&#xff1a;性能监控、自动报警 云服务器使用的100种可能性 使用云服务器的三大好处 什么是云…

Mac系统服务器管理工具倾情推荐

文章目录 结论背景对比Mac下使用FinalShell登录效果&#xff1a;使用Iterm2效果 总结 读者朋友大家好&#xff0c;今天给Max系统推荐一款【服务器管理工具】-FinalShell 结论 登录服务器&#xff0c;Iterm2至少折腾1h&#xff0c;FinalShell几分钟。 背景 不同的OS&#xf…

【干货】系统管理员必备,服务器监控工具汇总

服务器监控工具对于IT基础架构性能、可视化和系统稳定至关重要。合适的工具能够帮助系统管理员面对服务器故障、应用缓慢、停机、内存泄露和配置依赖等挑战。 Nagios、Zabbix等工具是用于监控整个基础结构监控工具。使用它们&#xff0c;系统管理员可以监控几乎所有内容&#…

云服务器批量管理,云服务器批量管理工具

对于很多新手小白来说&#xff0c;云服务器是一个看不见摸不着的东西&#xff0c;很多名词都是一个概念性的存在。   怎么去操作云服务器更是无从下手&#xff0c;今天主要来写一篇关于怎样远程登录操作云服务器的教程。 首先&#xff0c;我们的云服务器来源&#xff0c;要么…