原型: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 ++;
新闻热点
疑难解答