(面试题的四种答案)重写strcpy库函数..看不懂
下面是四种写法,四种写法的质量依次增强,能解释下这四种写法吗???
第一种:
void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
第二种:
void strcpy( char *strDest, const char *strSrc )
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
第三种:
void strcpy(char *strDest, const char *strSrc)
{
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
第四种:
char * strcpy( char *strDest, const char *strSrc )
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;
while( (*strDest++ = * strSrc++) != ‘\0’ );
return address;
}
这是C C++程序员面试的题目,作者对四种不同的答案进行了评价.......
[解决办法]
void strcpy( char *strDest, char *strSrc ) //字符串的指针{ while( (*strDest++ = * strSrc++) != ‘\0’ ); //将后者第1个字符赋给前者首地址,然后各自} //自增,将后一个字符赋给前者 直到后者出现 //0(字符串结尾),字符是'\0' 第二种: void strcpy( char *strDest, const char *strSrc ) //算法相同,加了const表示是常量,可以防{ //止在函数中修改后者的内容 while( (*strDest++ = * strSrc++) != ‘\0’ ); } 第三种: void strcpy(char *strDest, const char *strSrc) { assert( (strDest != NULL) && (strSrc != NULL) ); //判断一下,为空就不需要赋值 while( (*strDest++ = * strSrc++) != ‘\0’ ); } 第四种: char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; // 这个作用不清楚,不过我写函数也习惯在函数里重新定义一个指针接 while( (*strDest++ = * strSrc++) != ‘\0’ ); //受参数 return address; }