C语言 ——— 模拟实现strcpy函数

目录

strcpy函数功能介绍

strcpy函数的模拟实现


strcpy函数功能介绍

学习并使用strcpy函数-CSDN博客


strcpy函数的模拟实现

代码演示:

复制代码
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* destination, const char* source)
{
	assert(destination != NULL);
	assert(source != NULL);

	char* ret = destination;

	while (*destination++ = *source++);

	return ret;
}

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

代码解析:

解析:assert(destination != NULL); & assert(source != NULL);

assert 为宏,用于断言,当 assert 中的判断式为假时,也就是当 destination 或者source为空(NULL)时,程序就会直接报错,并指出 assert 报错的行数

解析:char* ret = destination;

创建 char*类型指针变量ret ,用来存储 **目的地字符串(destination)**的起始位置,以便于返回

解析:while (*destination++ = *source++);

**后置++的规则:**先使用,后++

所以是 source 解引用后赋值给解引用后的 destination,再各自++

while循环 内是赋值表达式,赋值表达式的结果就是 source 赋值 destination 后的结果,刚好能把 source 的 '\0' 也赋值给 destination,并且结束循环

代码验证:

当 destination 或者 source 为空(NULL)时:

不接收 my_strcpy函数 的返回值:

接收 my_strcpy函数 的返回值:

my_strcpy函数 的返回值 直接作为 printf函数 的参数:

相关推荐
Irissgwe16 小时前
C&C++内存管理
c语言·开发语言·c++·c++内存管理
雾岛听蓝16 小时前
C文件操作与系统IO
linux·c语言·开发语言·经验分享·笔记·算法
Yupureki17 小时前
《C++实战项目-高并发内存池》3.ThreadCache构造
服务器·c语言·c++·算法·哈希算法
spiritualfood17 小时前
蓝桥杯大学b组水质检测
c语言·c++·算法·青少年编程·职场和发展·蓝桥杯
01二进制代码漫游日记20 小时前
C/C++中的内存区域划分
c语言·jvm·数据结构·学习
炸膛坦客20 小时前
单片机/C语言八股:(三)C 语言编译器的优化功能,包括 keil(仅作了解)
c语言·单片机·嵌入式硬件
人道领域20 小时前
【绝对干货】C语言常量,变量,内存全方位总结:从入门到精通,这一篇就够了!
c语言·开发语言
代码改善世界20 小时前
【数据结构】八大排序算法详解(C语言实现)|插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序
c语言·数据结构·排序算法
香水5只用六神21 小时前
【TIM】基本定时器定时实验(2)
c语言·开发语言·stm32·单片机·嵌入式硬件·mcu·学习
TrueDei21 小时前
linux-C/C++主子进程同时占用主进程文件描述符问题
linux·c语言·c++