assert函数的基本了解 和 const函数对指针的作用

本文介绍了如何在C++中使用my_strcpy函数安全地复制字符串,强调了const关键字在防止误操作和提升代码可读性上的作用,以及在处理指针和内存安全方面的应用。
摘要由CSDN通过智能技术生成
#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
//void my_strcpy(char* a, char* b)
//
//{
//	while (*b != '\0')
//	{
//		*a = *b;
//		b++;
//		a++;
//	}
//	*a = *b;
//}

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

char* my_strcpy(char* a, const char* b)//给b指针前面加一个const,是为了防止下面循环中拷贝拷反了,并且能及时报错
									  //比如说:下面循环条件不小心写成了(*b++=*a++),这样就不能达到想要的效果
									  //在b指针前面加一个const可以在运行程序时会在软件下方错误列表及时报错
									  //便于找到错误
{
	char* ret = a;//将目标空间的首地址存起来
	//断言
	assert(b != NULL);
	assert(a != NULL);//assert语句用来判断a,b是否为空指针
					  //如果a和b之中任意一个为空指针的话,程序运行会报错
					  //运行窗口会告诉你错误信息,
	while (*a++ = *b++)//后置++的优先级高于“=”操作符,当b指向\0时判断条件为假,终止循坏
	{
		;
	}
	//return a;//返回目标空间的首地址
	//将函数从void类型改为char*类型便于进行链式访问
}
int main()
{
	char a[20] = "xxxxxxxxxxs";
	char b[] = "hello everyone";
	char* p = NULL;
	//strcpy(a,b);//strcpy函数拷贝字符串的时候,会把原字符串的\0也拷贝过去
	//my_strcpy(a, p);
	printf("%s\n", a);
	//printf("%p\n", my_strcpy(a, b));
	return 0;
}

//const对指针的一些作用

int main()
{
	int num = 100;
	int n = 10;
	const int* p = &num;
	//*p = 102; 错误
	//当const写在*的左边,p指向的对象不能通过p来改变了,但是p变量本身的值是可以改变的
	//? 代表是未知值(这是方便自己理解,不是c语言中的标准)
	//其实就是num的值不能通过“*p=?”这个赋值表达式来修改了,但是p这个指针变量指向的位置可以发生变化
	//p = &n; //对的

	int* const u = &num;
	//*u = 1000;//对的
	//u = &n;//错的
	//当const在*的右边,u所指向的对象可以通过u来改变,但是u变量本身的值无法通过p来改变
	//其实就是num的值可以同“*u=?”这个赋值表达式来更换,但是u这个指针变量所指向的位置不能更改
	printf("%d\n", num);
	return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值