C语言 字符串拷贝函数的实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int main01()
{
	char src[] = "abdcjfsomfgld";
	char dst[100];
	int i = 0;

	for (i = 0; src[i] != '\0'; i++)
	{
		dst[i] = src[i];
	}
	//补结束符\0,或者在初始化的时候,将数组初始化为:char dst[100]={0};
	dst[i] = '\0';//等价于dst[i] = 0;
	printf("%s\n", dst);

	printf("\n");
	return 0;
}
void my_strcpy(char* dst, char* src)
{
	操作数组下标的方式
	int i = 0;

	for (i = 0; src[i] != '\0'; i++)//等价于*(src+i)!='\0'
	{
		dst[i] = src[i];//等价于:*(dst+i)=*(src+i);
	}
	//补结束符\0,或者在初始化的时候,将数组初始化为:char dst[100]={0};
	dst[i] = '\0';//等价于*(dst+i) = 0;
}

void my_strcpy2(char* dst, char* src)
{
	//操作指针的方式
	while (*src != 0)
	{
		*dst = *src;
		dst++;
		src++;
	}
	//补结束符
	*dst = 0;
}

void my_strcpy3(char* dst, char* src)
{
	//操作指针的方式
	while (*src != 0)
	{
		*dst++ = *src++;//先用了,再加。等价于:*dst = *src;dst++;src++;
	}
	//补结束符
	*dst = 0;
}

void my_strcpy4(char* dst, char* src)
{//一行代码形式
	/*
		*dst = *src;
		dst++ , src++;
		判断*dst是否为0,为0跳出循环
	*/
	while (*dst++ = *src++)
	{
		NULL;
	}
}

//成功为0,失败为非0
//1、
//2、最好不要直接使用形参
int  my_strcpy5(char* dst, char* src)
{
	if (src == NULL || dst == NULL)
	{
		return -1;
	}
	//辅助变量把形参接过来
	char* to = src;
	char* from = dst;

	while (*from++ = *to++)
	{
		NULL;
	}
	printf("my_strcpy5:dst%s\n", dst);

	return 0;
}

int main()
{
	char src[] = "abdcjfsomfgld";
	char dst[100];

	my_strcpy(dst, src);
	printf("%s\n", dst);

	my_strcpy2(dst, src);
	printf("%s\n", dst);

	my_strcpy3(dst, src);
	printf("%s\n", dst);

	int i = 0;
	int n = i++;
	printf("n=%d,i=%d\n", n, i);//0,1

	int j = 0;
	int m = ++j;
	printf("m=%d,j=%d\n", m, j);//1,1

	//一行代码方式
	my_strcpy4(dst, src);
	printf("%s\n", dst);

	//完善后的字符串拷贝函数
	int ret=0;
	ret = my_strcpy5(dst, src);
	if (ret != 0)
	{
		printf("my_strcpy5 error: %d\n", ret);
	}
	printf("%s\n", dst);

	printf("\n");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值