字符串复制函数strcpy的实现算法

本文详细探讨了字符串复制的过程,包括三种不同情况下如何进行字符串复制,并提供了具体的代码实现。通过实例演示,清晰地展示了源字符串如何覆盖或复制到目的字符串,以及在不同字符串长度下如何正确处理字符串结束标志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,字符串复制,需要考虑三种情况:

  • 目的字符串未被赋值,本身是个空串,源字符串存在。
  • 目的字符串长度m大于或等于源字符串长度n,此时复制时,源字符串代替目的字符串前n个字符,目的字符串后m-n个字符扔被保留,不需要在结尾再补上字符串结束标志’\0',因为目的字符串的结束标志会被保留。
  • 目的字符串长度m小于源字符串长度n,此时复制时,源字符串前m个字符相当于覆盖了目的字符串,后n-m个字符也要复制到目的字符串中,在实现的过程中,我们是以当前字符不等于字符串结束标志’0‘来循环复制的,有效字符复制结束后,还需要在结尾再补上‘\0'。这种情况的复制,和第一种复制的效果是一样的,都是源字符串覆盖目的字符串,只不过第一种情况目的字符串为空串。

2,代码如下:

#include "stdafx.h"
#include<stdio.h>
#include"global.h"
#include <assert.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
char* springCopy(char*to,char*from)
{
	int i=0,j=0;
	assert(to!=NULL&&from!=NULL);
	while(*to!='\0'&&*from!='\0')
		*to++=*from++;
	if(*to=='\0')//如果源字符串长度大于目的字符串长度,则复制完后,需要在结尾加上字符串结束标志。
	{
		while(*from!='\0')
			*to++=*from++;
		*to='\0';
	}
	return to;
}

void main()
{   
	char*f;
	char*t;
	f=(char*)malloc(20);
	if(f==NULL)
	{
		printf("不能成功分配存储空间");
		exit(1);
	}
	t=(char*)malloc(20);
	if(t==NULL)
	{
		printf("不能成功分配存储空间");
		exit(1);
	}
	printf("**********************************\n");
	printf("     实现字符串复制函数strcpy     \n");
	printf("**********************************\n");
	printf("请输入目的字符串A:\n");
	scanf("%s",f);
	printf("\n");
	printf("请输入源字符串B:\n");
	scanf("%s",t);
	printf("\n");
	springCopy(f,t);
	printf("输出从字符串B复制到字符串A中的结果:");
	printf("%s",f);
	printf("\n");
	printf("\n");
}


3,运行结果示意图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值