编程实现strcpy函数

/*
	主题:实现strcpy函数
	已知strcpy函数的原型是:
	char *strcpy(char *srtDest, char *strSrc);
*/
#include <stdio.h>

char *strcpy(char *strDest, const char *strSrc);
int getStrLen (const char *strSrc);

int main(void)
{
	char strSrc[] = "Hello World!";
	char strDest[20];
	int len = 0;

	len = getStrLen(strcpy(strDest, strSrc));
	printf("strDest: %s\n", strDest);
	printf("Length of strDest: %d\n", len);

	return 0;
}

char *strcpy(char *strDest, const char *strSrc)
{
	/*
		判断参数strDest和strSrc的有效性
	*/
	if ((strDest == NULL)|| (strSrc == NULL))
	{
		return NULL;
	}

	char *strDestCopy = strDest;			//保存目标字符串的首地址
	while((*strDest++ = *strSrc++) != '\0')
	{
		;
	}

	return strDestCopy;
}

int getStrLen (const char *strSrc)
{
	int len = 0;
	while(*strSrc++ != '\0')
	{
		len++;
	}

	return len;
}

(2)strcpy函数返回char *类型是原因是为了能够使用链式表达式. 关于链式表达式:

看到了这个词:链式表达式,之前没有听过,所以去百度了一下,发现有人解释的还算明白:

-------------------------------------------------------------------------------------------------------------------------------- http://topic.csdn.net/t/20061123/21/5180993.html 1,

就是方便一些,否则就要这样写:

char strDest[12];

strcpy( strDest, “hello world”);

int length = strlen(strDest);

什么链式就是一连串写下来的意思。。。

 --------------------------------------------------------------------------------------------------------------------------------

 其实,说白了,就是如果上面的字符串拷贝函数strcopy的返回值是void,那么,上面那句:

 int length = strlen( strcpy( strDest, “hello world”) );

 就要像上面那位的回答,写成好几句了:

char strDest[12];

 strcpy( strDest, “hello world”);

int length = strlen(strDest);

而这种直接返回char *的手段,就是为了后来函数调用者方便而设计的.不用你这么麻烦用上述方法去使用了,而直接可以使用拷贝后的dest字符串了.这种方便的实现方法,看起来就是链子链在一起的,所以称为 链式表达式

如此而已.呵呵.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值