读书人

(面试题的四种答案)重写strcpy库函数.

发布时间: 2012-03-14 12:01:12 作者: rapoo

(面试题的四种答案)重写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++程序员面试的题目,作者对四种不同的答案进行了评价.......


[解决办法]

C/C++ code
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; } 

读书人网 >C语言

热点推荐