字符串复制strcpy()实现及常见问题

原型:char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。

实现:

char *strcpy(char *des, const char *src){
	assert( (NULL!= des) && (NULL != src) );

	char * address = des;
	while( (* des ++ = * src ++)  != '\0' ) 
		;

	return address;
}

常见问题:

1、为什么返回char*?

答:为了实现链式表达式(就是一连串写下来的意思。。。)。例如:

int len = strlen ( strcpy ( des, "hello") );
如果返回类型为void,那就要这样写:

char des[10];
strcpy( des, "hello" );
int len = strlen( des );

不如链式表达式精简。

2、NULL == des 为什么将常量写在表达式的左边?

答:如果手误将表达式错写成了赋值,则马上报错;如果将表达式写成des != NULL,漏写了一个!,变成了des = NULL,则检查不出错误来,可能会出现意想不到的错误。

3、为什么参数要加const 限定符?

答:如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。

4、关于 =  * 和 right++ 这三个操作符的优先级:

* 和 right ++ 的优先级都是2级,是对等的,其次是 = ,由于 right++ 的特点是:滞后使用,造成会先赋值,再指针 ++。

所以 *des ++ = * src ++可以拆分成:

*des = *src;
des ++;
src ++;




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值