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

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

一、认识strcpy函数

 模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第1张图片

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

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

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第2张图片 

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

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第3张图片

 二、模拟实现strcpy函数

版本一:

#include 
#include 
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 
#include 
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;
}

 

 

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第4张图片

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

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

优化3:

#include 
#include 
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;
}

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第5张图片

 优化4:

#include 
#include 
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;
}

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第6张图片

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第7张图片 优化5:(剖析strcpy库函数)(const)

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第8张图片

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第9张图片 

 

#include 
#include 
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 如果放在 * 的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指
针指向的内容,可以通过指针改变
模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第10张图片

模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第11张图片 

 模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第12张图片

此时此刻,我们假设现在暂时没有const模拟strcpy函数,assert,const修饰指针与凉皮男孩的故事_第13张图片

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

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

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

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

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

请添加图片描述

你可能感兴趣的:(c语言,strcpy函数,悲伤故事)