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

来源:互联网 发布:竞拍源码 编辑:程序博客网 时间:2024/06/06 05:34

原型: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 0
原创粉丝点击