通过自行定义函数实现strcpy(字符串拷贝)功能的方法对比

文章目录

     strcpy介绍;

     自行定义函数实现strcpy功能的几种方法;

     各自的优缺点;

strcpy介绍

      strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。

      说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针

自行定义函数实现strcpy功能的几种方法

 1.直接将src中内容逐个赋值到dest中,实现strcpy功能:

# include <stdio.h>

void my_strcpy(char *dest, char *src)
{
   while (*src != '\0')  //完成字符串中各元素的复制;
   {
//     *dest = *src;
//     *src++;
//     *dest++;

      *dest++ = *src++; 
   }
  *dest = *src; //完成字符串结束标志'\0'的复制;
}

int main()
{
	char arr1[] = "############";
	char arr2[] = "hello";

	my_strcpy(arr1, arr2); //定义my_strcpy函数;
	printf("%s\n", arr1);	//打印结果hello;
	                                      ​​
	return 0;
}


 2.判断指针的有效性后,若无效程序不执行,若有效,将src中内容逐个赋值到dest中,实现strcpy功能:

# include <stdio.h>

void my_strcpy(char *dest, char *src)
{
	if (dest != NULL && src != NULL)  //判断指针的有效性;
	{
		while (*dest++ = *src++)
		{
			;
		}
	}
}

int main()
{
	char arr1[] = "############";
	char arr2[] = "hello";

	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);	
	
	return 0;
}

3.判断指针的有效性,若无效进行错误提示,若有效,将src中内容逐个赋值到dest中,实现strcpy功能:

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

void my_strcpy(char *dest, const char *src)// const防止src中内容被修改,保护源字符串;
{
	assert(dest != NULL);//断言,判断指针的有效性,若指针无效则打印一条错误信息进行提示;
	assert(src != NULL);

	while (*dest++ = *src++) 
	{
		;
	}	
}

int main()
{
	
	char arr1[] = "############";
	char arr2[] = "hello";

	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);	
	
	return 0;
}

 4.判断指针的有效性,若无效进行错误提示,若有效,将src中内容逐个赋值到dest中,最终通过返回dest值,实现strcpy功能:

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

char * my_strcpy(char *dest, const char *src)
{
	char * ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest++ = *src++) 
	{
		;
	}
	return ret;	//通过返回值的形式实现拷贝功能,增加函数可用性;
}

int main()
{
	char arr1[] = "############";
	char arr2[] = "hello";

	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);	
	
	return 0;
}

各自的优缺点

    方法一不检查指针的有效性,不注重代码的健壮性;方法二虽判断了指针的有效性,但并没有给出错误的解决办法,导致程序在后期运行中不易维护;方法三比较好的实现了指针的有效性的判断,加强了代码的健壮性,但是函数定义部分功能不能体现函数的单一功能性,后期的可用性不是很强;方法四在三的基础上,采用返回值的形式,支持链式表达式,增加了函数的"附加值",提高了可用性,方便调用者的使用,增强了程序的可维护性。

      不足之处,请多指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值