C语言—— 模拟strcpy函数 (assert()函数、const的用法)

目录

1、模拟strcpy函数

1.1 assert()函数

1.2 const用法

1.2.1作用一:const修饰变量

1.2.2作用二:const修饰指针

1.3模拟strcpy函数代码优化 


1、模拟strcpy函数

模拟函数不是实现函数,这是有区别的!模拟函数要完全符合这个函数的定义,而实现函数只需要实现这个函数最后表现出来的功能即可。以下是代码实现:

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

char* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);//断言
	char* ret = dest;

 	while (*src != '\0')
   {
	    *dest = *src;
		dest++;
		src++;
	}
	return ret;
}

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

​

1.1 assert()函数

        如果dest和src指针传参时为空指针(NULL),程序不能显示出结果,这就需要程序员去对代码进行调试。assert的作用是当指针为空时,能及时报错,省去调试的时间。

此时是模拟函数中传进了空指针时被assert函数截断:

1.2 const用法

作用一:const修饰变量

作用二:const修饰指针

1.2.1作用一:const修饰变量

 当变量n在定义时加上const,那么之后再对n进行修改会报错。通俗地说就是n从变量变成了常量,常量不能修改。

#include<stdio.h>
int main()
{
	const int n = 0;
	n = 20;
	printf("%d\n",n);
	return 0;
}

1.2.2作用二:const修饰指针

此情况会相对复杂!

修饰在*前:表示修饰指针指向的内容,指针指向的内容不得被修改。但指针变量本身是可                       以被改变的。

修饰在*后: 表示修饰指针变量本身,指针变量指向的内容不得被修改,但指针指向的内容                        可以被修改。

 修饰在*前:

#include<stdio.h>
int main()
{
	int n = 10;
	int m = 20;

	const int* p = &n;
	*p = m;//错误,指针指向的内容不得被改变
	p = &m;//正确,指针变量指向的内容可以改变

	printf("%d\n", n);
	return 0;
}

修饰在*后: 

#include<stdio.h>
int main()
{
	int n = 10;
	int m = 20;

	int* const p = &n;
	*p = m;//正确,指针指向的内容可以被修改
	p = &m;//错误,指针变量指向的内容不得被修改

	printf("%d\n", n);
	return 0;
}

1.3代码优化 

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

char* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);//断言
	char* ret = dest;
//
    while (*dest++ = *src++)//此语句直接实现了判断、赋值和自增
    {
	    ;
    }
//
    return ret;
}

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

猜你喜欢

转载自blog.csdn.net/weixin_59174190/article/details/122551166