模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事

         那么好了好了,宝子们,今天给大家介绍一下strcpy函数及其模拟,还有assert,const与凉皮男孩间的爱恨情仇,来吧,开始整活!⛳️(今天的内容和故事非常的有趣,希望大家一键三连,嘿嘿~) 

一、认识strcpy函数

 

废话不多说,我们直接写代码来实现一下:

#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>
#include <string.h>//注意必须要引用头文件
int main()
{
	char arr1[] = "hello bit";
	char arr2[] = "xxxxxxxxxxxx";//12个
	strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

 

         在这个函数还需要注意一点,它也会将你的终止字符也就是字符串的结束标志\0,也会复制到目的地的数组中,接下来让我们用调试监视窗口来看一下内部是怎么个来龙去脉?

 二、模拟实现strcpy函数

版本一:

#include <stdio.h>
#include <string.h>
void my_strcpy(char* destina, char* source)//我们的目的是将arr1中的数组内容复制到arr1中.(目的地:destination 源头:source)
{
	while (*source != '\0')
	{
		*destina = *source;
		source++;
		destina++;
	}
	*destina = *source;//不要忘了\0的copy
}

int main()
{
	char arr1[] = "hello bit";
	char arr2[] = "xxxxxxxxxxxx";//12个
	my_strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

 优化2:(+断言)

#include <stdio.h>
#include <assert.h>
void my_strcpy(char* destina, char* source)//我们的目的是将arr1中的数组内容复制到arr1中.(目的地:destination 源头:source)
{
	//assert(断言)
	assert(destina != NULL);
	assert(source != NULL);

	while (*source!='\0')//这个地方将\0也复制了进去
	{
		source++;
		destina++;
	}
	*destina = *source;
}
int main()
{
	char arr1[] = "hello bit";
	char arr2[] = "xxxxxxxxxxxx";//12个
	char* p = arr2;//创建一个指针变量
	p = NULL;//这里要将NULL空地址赋给一个指针变量
	my_strcpy(p, arr1);
	printf("%s\n", arr2);
	return 0;
}

 

 

        assert很高效,当我们期望某一个事情不发生的时候,我们在这里断言一下,如果报错了,他能够准确的告诉你是哪一行再不用,让你再一个一个的去找哪里出了问题

        assert其实是一种预判,而且在使用的时候要引用头文件

优化3:

#include <stdio.h>
#include <assert.h>
void my_strcpy(char* destina, char* source)//我们的目的是将arr1中的数组内容复制到arr1中.(目的地:destination 源头:source)
{
	//assert(断言)
	assert(destina != NULL);
	assert(source != NULL);

	while (*destina = *source)//这个地方将\0也复制了进去
	{
		source++;
		destina++;
	}
}
int main()
{
	char arr1[] = "hello bit";
	char arr2[] = "xxxxxxxxxxxx";//12个
	my_strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

 优化4:

#include <stdio.h>
#include <assert.h>
void my_strcpy(char* destina, char* source)//我们的目的是将arr1中的数组内容复制到arr1中.(目的地:destination 源头:source)
{
	//assert(断言)
	assert(destina != NULL);
	assert(source != NULL);

	while (*destina++ = *source++)//这个地方将\0也复制了进去
	{
		;//空语句:因为必须要写,但有什么也不执行
	}
}
int main()
{
	char arr1[] = "hello bit";
	char arr2[] = "xxxxxxxxxxxx";//12个
	my_strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}

 优化5:(剖析strcpy库函数)(const)

 

 

#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* destina, const char* source)//我们的目的是将arr1中的数组内容复制到arr1中.(目的地:destination 源头:source)
{
	//assert(断言)
	assert(destina != NULL);
	assert(source != NULL);

	char* ret = destina;//用来标记最终所复制后的数组的起始位置,以便于后续打印
	while (*destina++ = *source++)//这个地方将\0也复制了进去
	{
		;//空语句:因为必须要写,但有什么也不执行
	}
	return ret;
}
int main()
{
	char arr1[] = "hello bit";
	char arr2[] = "xxxxxxxxxxxx";//12个
	//my_strcpy(arr2, arr1);
	printf("%s\n", my_strcpy(arr2, arr1));
	return 0;
}

 

 

之前我们学过const修饰的变量,就会具有了常量的属性:

在这里我们有如下结论:

结论:
const 修饰指针变量的时候:
1. const 如果放在 * 的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改
变。但是指针变量本身的内容可变。
2. const 如果放在 * 的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指
针指向的内容,可以通过指针改变

 

 

此时此刻,我们假设现在暂时没有const

 以上是凉皮男孩的故事,有人看故事,有人照镜子。

这个故事,只是为了娱乐,是为了帮助大家更好的理解const的修饰指针时候的所起的作用效果

帮助大家理解,实际上记住结论就可以。

好了,今天的分享就到这里了

如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!

请添加图片描述

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小能软糖_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值