IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】C语言模拟实现strcpy库函数 -> 正文阅读

[C++知识库]【C语言】C语言模拟实现strcpy库函数

  • strcpy是进行字符串拷贝的函数
  • %s - 以字符串的形式打印
  • 需要引用的头文件<string.h>

main主函数内的准备代码:

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

注:strcpy函数内的参数arr1为目标空间的起始地址,arr2为源空间的起始地址.

运行结果:

简要分析:

arr1向arr2进行拷贝时,实际上拷贝的是"hello\0",'\0'是字符串的结束标志,不会打印'\0'后面的内容.

模拟实现strcpy库函数:my_strcpy

  • arr1是数组名,也是数组首元素的地址.传递参数时,第一个参数应当写成char* dest.
  • arr2也是数组首元素的地址,第二个参数应当写成char* src.
  • 数组传参时,为了减少空间资源的浪费,往往不是把整个数组传递过去,而是数组首元素的地址.
  • 对变量名进行命名时,应做到"见名知意".
  • my_strcpy只进行拷贝,不需要返回值,返回值类型为void.

画图分析:

void my_strcpy(char* dest, char* src)
{
	
		*dest = *src;
		dest++;
		src++;
	
}

*dest = *src的作用是把当前解引用操作找到的字符赋值给目标空间数组对应的元素.

赋值完毕后,为使dest/src指向的元素地址更新,应当及时++.

注意:这里不能对*dest/*src++,只有变量才能做运算,*dest为解引用操作找的元素,是常量.

可以发现上面的三条语句应在一定范围内循环执行,循环条件为*src?!='\0';

void my_strcpy(char* dest, char* src)
{
	while (*src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
}

当*src == '\0'时,循环停止,但“hello\0"的最后一个字符'\0'还没有拷贝.

void my_strcpy(char* dest, char* src)
{
	while (*src != '\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;
}

运行结果:

?解法二:

//void my_strcpy(char* dest, char* src)
//{
//	while (*src != '\0')
//	{
//		*dest++ = *src++;
//	}
//	*dest = *src;
//}

*dest++ = *src++;这条语句的++为后置++,先使用,再自增.等效于:

①*dest = *src;

②dest++;

③src++;

dest和src谁先自增,谁后自增,不影响程序的运行结果.

解法三:

void my_strcpy(char* dest, char* src)
{
	while (*dest++ = *src++)
	{
		;
	}
}

*dest++ = *src++;这条语句放在循环条件中,比较的是字符的ASCII码值,'\0'的ASCII码值为0

①当*src为'\0'时,赋值给*dest,此时*dest == ‘\0’,0为假,循环停止.

②空语句的作用:既拷贝了'\0',又使得循环停止.

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:25:11  更:2022-02-01 20:27:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:57:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码