字符串拷贝函数:strcpy的详解及模拟实现

153 篇文章 40 订阅
订阅专栏

字符串拷贝函数:strcpy的详解及模拟实现!!!

对于字符串拷贝函数,之前在学习字符串时候,就已经学习过,但那只是片面的学习了一下,并没有经过系统的分析!只是大概的学习了一下!在关键的地方有时候还不知道该怎么用!所以出现学习跟没有学一样的效率!因此,笔者最近再次系统的学习了一下:所以才打算发一篇文章:  字符串拷贝函数:strcpy的详解及模拟实现 !来与大家共勉!

首先对于字符串拷贝函数:strcpy 我们需要知道:

char* strcpy(char* destination ,const char* source)

上述的代码是指:在strcpy函数使用的时候,需要注意的格式问题!!对于destination 是指 :目的地  ,  source  是指:源头!!该片段的总体意思是:将源头拷贝到目的地!

对于本文的学习之前,需要知道一下知识储备!:

1.源字符串必须以'\0'结尾!

2.strcpy字符串拷贝函数:会将源字符串中的'\0'拷贝到目标空间!

3.目标空间必须足够大,以确保能存放源字符串!!

4.目标空间必须可变!(不能被const修饰)!

5.要学会strcpy字符串拷贝函数的模拟实现!

对于strcpy字符串拷贝函数!我们先做一下知识储备:

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[10] = { 0 };
	const char* p = "abcdef";
	strcpy(arr, p);
	printf("%s\n", arr);
	return 0;
}

这段代码就是对于:strcpy字符串拷贝函数的简单实现!!想必大家也都能看懂!

代码的运行结果为:

 但是对于:const char* p = "abcdef";中的'\0'要不要拷贝到arr[10]里面去??心存疑惑!!

因此,我们可以将arr[10]数组进行初始化为:arr[10]="xxxxxxxxx"!!这样操作,加上调试,更能直观的看出来!

因此更改后的代码为:虽然结果也是一样的,但是在调试的过程中,可以显现出来:strcpy字符串拷贝函数:会将源字符串中的'\0'拷贝到目标空间!

 代码调试前的结果为:

请注意:arr[10]数组里面值的变化!

代码调试完成以后的结果为:

 综上代码的调试结果所述:strcpy字符串拷贝函数:会将源字符串中的'\0'拷贝到目标空间!

但是,在使用strcpy拷贝字符串中,必须要知道'\0‘所在的位置:因此,对于字符数组的拷贝就会出现问题!!请看下列代码::

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[10] = "xxxxxxxxx";
	char arr2[] = { 'a','b','c' };
	strcpy(arr, arr2);
	printf("%s\n", arr);
	return 0;
}

 对于上述的代码中:由于在字符数组中:'\0'的位置并不知道,导致越界访问,所以会出现错误!!

请看代码的运行结果:

对于上述的出现错误的代码,笔者就不再进行调试了!请各位老铁可以理解一下!!

但是,当使用字符数组进行strcpy进行拷贝时候,手动放置一个'\0'!也可以进行正常的拷贝使用!!

 在这个代码中,拷贝的时候,也会将'\0'进行拷贝!!对于此问题,我们依然 可以通过调试来进行分析!

在调试完成之前的:

 调试完成之后:

在上述的调试结果中:我们可以清晰地看出来!在字符数组中,手动放置的'\0'也会进行拷贝!!

结合以往经验,笔者苦心专研了两个错误写法,下面请笔者……看一下代码:

1.目标空间必须足够大,以确保能存放源字符串!!否则,将会出现崩溃现象!!错误演示,请忽模仿


#include <stdio.h>
#include <string.h>
int main()
{
	char arr[3] = { 0 };
	char arr2[] = "abcdef";
	strcpy(arr, arr2);
	printf("%s\n", arr);
	return 0;
}

代码的运行结果为:

 程序崩溃!!

2.目标空间必须可变!(不能被const修饰,常量字符串不可被修改)!错误演示,请忽模仿

#include <stdio.h>
#include <string.h>
int main()
{
	char* p = "hello world";
	char arr2[] = "abcdef";
	strcpy(p, arr2);
	printf("%s\n", p);
	return 0;
}

 该段代码的运行结果为:

 直接出现错误,不能被更改!!

上面两个是笔者之前专研的!!对于其他的bug若是读者有不同的想法,请私聊笔者哟!

下面笔者进行对strcpy字符串拷贝函数的模拟实现!!!也到了该拿出压箱底的实力了!!

请看笔者代码:

#include <stdio.h>
#include <string.h>
#include <assert.h>

char* my_strcpy(char* dest, const char* src)
{
	assert(dest);
	assert(src);
	char* ret = dest;
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = "abc";
	char arr2[] = "hello wang";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

对于上述代码中:

1.    assert(dest);   assert(src);  断言,因为在后面的文章中,对dest 与src都进行了解引用操作,所以在使用之前要确保不是空指针!!

2.在while循环里面,为什么是:*dest++ = *src++  而不是:*dest=*src;  dest++; src++;呢 ???其实主要的原因还是在于拷贝'\0'的问题,当while 循环里面判断出来是'\0'则会进行跳出,不会拷贝'\0';所以进行了上述while循环里面的操作!!实现先赋值在判断!!

3.为什么在最后的返回值是:return ret;????而不是 return  dest;??? 原因在于:随着dest++与src++的赋值,dest早已不再指向起始位置!!

代码的运行结果为:

上述就是笔者对该strcpy字符串拷贝函数的模拟实现的解析,若有不懂得老铁,请私聊笔者哟!!

字符串拷贝函数
03-17
自己写的字符串拷贝函数,适合c语言初学者。内有详细注释。
strcpy函数和strcat函数的使用及实现
aqlll_的博客
09-25 3096
关于strcpy函数和strcat函数的使用、实现
C语言strcpy函数的超细节详解(什么是strcpy,如何模拟实现strcpy?)
最新发布
weixin_45031801的博客
03-11 5616
strcpy函数C语言中的字符串复制函数
C语言 字符串拷贝函数实现
qq_41883732的博客
04-16 1092
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> int main01() { char src[] = "abdcjfsomfgld"; char dst[100]; int i = 0; for (i = 0; src[...
C语言--strcmp函数,strcat函数strcpy函数详解实现
2301_76618602的博客
09-21 6530
strcmp函数是用来比较两个字符串大小的函数,需要引用头文件<string.h>。strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较标准规定:第一个字符串大于第二个字符串,则返回大于0的数字第一个字符串等于第二个字符串,则返回0第一个字符串小于第二个字符串,则返回小于0的数字strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容。
c语言strcpy()和strncpy():字符串复制详解
m0_74195174的博客
02-02 1743
通过深入理解这两个函数的特性,我们可以更有效地使用它们,提高代码的质量和可维护性。
C语言字符串拷贝 函数实现
剑 来
12-01 844
字符串拷贝 函数实现 : # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <stdlib.h> # include <string.h> void my_strcpy(char * dst, char *src) { int i = 0; for (i = 0; *(sr...
字符串strcpy
weixin_34376562的博客
12-31 76
【1】字符串拷贝函数如何实现? (1)第一种设计思想:逐字符拷贝 方法简述:把字符串内容看作字符数组,进行逐个字符拷贝,最后添加结束符 示例代码如下: 1 void strcpy1(char *strDest, const char *strSrc) 2 { 3 assert((strDest != NULL) &amp;&amp; (strSrc != NULL...
C语言strcpy()函数字符串复制(拷贝函数
爱干饭的猿的博客
11-06 865
#include <stdio.h> #include <stdlib.h> #include <assert.h> char* mystrcpy(char* dest, const char* sourse) { assert(dest != NULL); assert(sourse != NULL); int i = 0; while (sourse[i] != '\0') { dest[i] = sourse[i]; i++; } retur.
字符串拷贝strcpy函数
qq_46163030的博客
01-28 542
C语言字符串拷贝
字符串拷贝函数strcpy实现
weixin_64523024的博客
12-03 501
这个函数实现比较简单:大家请看 需要注意的地方是目的地空间必须足够大,能够将源字符串的内容放进去 还有就是While循环的妙用 #include<stdio.h> #include<assert.h> char* my_strcpy(char* dest,constchar* src)//源字符串的内容不发生改变,用const修饰 { assert(dest!= NULL); assert(src!= NULL); char...
详解c语言中的 strcpy和strncpy字符串函数使用
08-26
strcpy 和strcnpy函数字符串复制函数。接下来通过本文给大家介绍c语言中的strcpy和strncpy字符串函数使用,感兴趣的朋友跟随小编要求看看吧
C语言字符串常用函数strcat与strcpy的用法介绍
12-25
函数实现: 代码如下:/********************** * C语言标准库函数strcpy的一种典型的工业级的最简实现 * 返回值:目标串的地址。 * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通
C/C++字符串函数之复制函数详解
01-20
突然发现对字符串函数缺乏系统的了解,所以花了一点时间专门整理下,在此记录之,以方便自己及有需要的人使用。 C/C++字符串函数的头文件:string.h 复制函数主要有4个,如下: 1、char * strcpy(char* destination...
字符串函数strcpy的使用及原理
01-02
字符串函数strcpy的使用及原理
strcpy函数详解字符串【复制】的利器
天行健、君子以自强不息
10-06 2万+
strcpy函数详解模拟实现strcpy函数
C语言strcpy()函数(字符串拷贝函数详解)
C/C++领域,数据结构,linux,MySQl学习者
10-26 1万+
有关C语言函数strcpy()函数详解,内容包括:函数简介,参数及返回值分析,函数的具体使用示例,模拟编写程序实现strcpy()函数功能等相关内容.
字符串拷贝函数实现
Ai_King的博客
11-05 721
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> void my_strcpy(char* dst, char* src) { int i; for (i = 0; *(src + i) != '\0'; i++) {...
字符串复制函数strcpy()
热门推荐
人生代码 ---- 公众号
05-26 2万+
两个字符串变量不可以使用“=”进行直接赋值,只能通用strcpy()函数进行赋值。strcpy是 string copy的缩写,即“字符串复制”。他的原型是: #include<stdio.h> char *strcpy(char *dest, const char *src); 功能是将指针变量src所指向的字符串复制到指针变量dest所指向的位置,dest和src可以是字符数组名...
使用指针实现以下字符串拷贝函数:将指针s指向的字符串拷贝至指针d指向的内存空间。 void StrCpy(char *s,char *d)
05-27
好的,下面是使用指针实现字符串拷贝函数: ```c void StrCpy(char *s, char *d) { while (*s != '\0') { *d = *s; s++; d++; } *d = '\0'; } ``` 解释一下这段代码: 首先,我们用一个 while 循环来遍历...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • C语言进阶之路:输入三个整数,输出最大值和最小值 30479
  • 学习到第一个国庆的感想 28403
  • 用递归的方法求n! 19006
  • Java的学习路线(非常完整) 16614
  • 输入5个同学的3门课程成绩,计算各门课程的总分及平均分 12125

分类专栏

  • 博客系统 3篇
  • java要笑着学 209篇
  • Java注意 41篇
  • 数据结构 42篇
  • MySQL数据库 20篇
  • 操作系统哪些事? 75篇
  • C语言入门级别 153篇

最新评论

  • 防火墙操作!

    普通网友: 支持一下,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 输入5个同学的3门课程成绩,计算各门课程的总分及平均分

    2301_80041617: 明白表情包

  • 指针的运算系列(2):指针-指针(相减)

    吾望己成龙: 哈哈,不理解是正常的,你这就讲逻辑了。计算机编程语言有对应语法,类比于英语其实本质上也没有那么讲逻辑的,还是数学更加讲究逻辑。

  • 输入5个同学的3门课程成绩,计算各门课程的总分及平均分

    念君思宁: 语法(多加了个“_s"是为了适应编辑器(要不然得报错,或者去更改编辑器配置(嗨麻烦)

  • 输入5个同学的3门课程成绩,计算各门课程的总分及平均分

    2301_80041617: scanf_s是什么东东啊

大家在看

  • MATLAB基础应用精讲-【数模应用】Turf组合模型 2
  • JavaScript 异步编程
  • 代码随想录Day8 - 344.反转字符串 |541. 反转字符串II | 151.翻转字符串里的单词 |3110. 字符串的分数
  • GB-T 27647-2024 湿地生态风险评估技术规范
  • 存储过程定义及优势

最新文章

  • IDEA 中导入脚手架后该如何处理?
  • Consider defining a bean of type ‘com.my.bbs.dao.BBSUserMapper‘ in your configuration.
  • SpringBoot项目中访问HTML页面
2024
05月 4篇
04月 5篇
03月 15篇
02月 21篇
01月 2篇
2023年132篇
2022年199篇

目录

目录

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念君思宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源圆周长公式司起名大全占卦起名字月开头的成语肖姓氏的起名魔兽单机地图兄弟公司起名第一文学门户站合规集团公司名字咋取名起名大全宏基客运站网上订票烁字起名含义书 起名zip格式潘字女起名大全免费软件取名起名大全我的娘家我的婆极黑的布伦希尔德如何包饺子性动作真人全过程福州电信商标取名起名大全评分宝宝按辈分起名字穿越好事多磨建筑劳务公司起名字啊公司取名起名大全检测食品公司起名大全集黄碧云经典语录2018狗年小孩子起名大全袁隆平贡献有哪些淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化