首页 > 学院 > 开发设计 > 正文

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

2019-11-06 06:34:48
字体:
来源:转载
供稿:网友

原型: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 ++;


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表