189 8069 5689

C语言的字符串复制-创新互联

提示:仅供参考,如有错误,还望指出。

创新互联公司是一家专业从事网站设计、网站制作的网络公司。作为专业网站制作公司,创新互联公司依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、成都全网营销及网站设计开发服务!

目录

目录

一、字符串复制

二、一些优化

1.一次简单优化

2.二次优化

3.三次优化

4.四次优化

5.最后的优化

总结


前言

以下是对字符串复制的一些优化

一、字符串复制

这是自己能想到的方法

主要思想:通过两个指针,对二者进行遍历,若该被复制的字符不为‘\0’来进行一一复制。

可是这样‘\0’字符就无法复制,而此时被复制字符的地址刚好又是‘\0’,再进行一次复制就好。

//我的字符串复制
void my_strcpy(char* dest,char* rsc)
{
	while (*rsc != '\0')
	{
		*dest = *rsc;
		dest++;
		rsc++;
	}
	*dest = *rsc;
}
二、一些优化

注:这些优化都是基于前一次的优化,也体现出一个循序渐进的过程

1.一次简单优化

这里实现了一小点的优化,也就是将三句语句合成一句

void my_strcpy(char* dest, char* rsc)
{
	while (*rsc != '\0')
	{
		*dest++ = *rsc++;
	}
	*dest = *rsc;
}

2.二次优化

这里实现了我们既可以赋值字符也能够复制'\0'

由于当被复制的字符为‘\0’时,也得到了复制,同时还跳出了循环

void my_strcpy(char* dest, char* rsc)
{
	while (*dest++ = *rsc++)
	{
		;
	}
}

3.三次优化

这里优化了健壮性,可这里没有体现出问题在哪。

在二次优化中,添加了一个判断语句,只有二者同时不为空指针时,才会进入遍历复制的过程。

void my_strcpy(char* dest, char* rsc)
{
	if (dest != NULL && rsc != NULL)
	{
		while (*dest++ = *rsc++)
		{
			;
		}
	}
}

4.四次优化

这里用到了断言函数assert();同时需要添加该头文件

使用assert()函数,若不满足函数体中条件,就会报错,并且具体体现在哪一行,更有利于找错。

#include
my_strcpy(char* dest, char* rsc)
{
	assert(dest != NULL);
	assert(rsc != NULL);
	while (*dest++ = *rsc++)
	{
		;
	}
}

5.最后的优化

这个就比较细节,也是为了防止一些错误而形成的优化。

在被复制字符中加上一个const,为了防止while循环中的条件,若不注意将二者位置调换,就会出现报错的情况。

这里也给大家推荐一个网站cplusplus.com - The C++ Resources Network 

若有不懂的函数或者函数需要的头文件都可以在这里查。         这里也到了strcpy函数中参数的类型,若以后要写类似于库函数的函数也可以考虑这里面的参数类型。

#include
void my_strcpy(char* dest, const char* rsc)
{
	assert(dest != NULL);
	assert(rsc != NULL);
	while (*dest++ = *rsc++)
	{
		;
	}
}

总结

 在我看来,编程很像数学,每当你了解到一个题目的多种解法后,有些解法会给人一种十分奇妙的感觉,也有一种勾起好奇心的感觉,就是由于这种好奇心,促使这我们成长。不过有时候的编程也很乏味,但是我们一定要坚持。

学习不易,如果这篇对你有帮助,足矣。

最后附上学习的链接(同样要是有一起学习的伙伴就更好了)

25.VS环境-C语言实用调试技巧(2)(C语言程序设计教程谭浩强 c语言谭浩强视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程_哔哩哔哩_bilibili

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:C语言的字符串复制-创新互联
链接分享:http://cdxtjz.cn/article/djgioc.html

其他资讯