C语言中关于strcry 引发的思考

无意中看到了关于面试题的博客   博客的出处

为了防止博客的失效我将其代码引入:

    

void strcpy( char *strDest, char *strSrc )
{
  while( (*strDest++ = * strSrc++) != '’ );   // ........................................2分
}
void strcpy( char *strDest, const char *strSrc ) 
//将源字符串加const,表明其为输入参数,加2分
{
  while( (*strDest++ = * strSrc++) != '’ );   // ........................................4分
}
void strcpy(char *strDest, const char *strSrc) 
{
 //对源地址和目的地址加非0断言,加3分
 assert( (strDest != NULL) && (strSrc != NULL) );  
 while( (*strDest++ = * strSrc++) != '’ );  //............................................7分
}
char * strcpy( char *strDest, const char *strSrc ) 
{
 assert( (strDest != NULL) && (strSrc != NULL) );
 char *address = strDest; 
 while( (*strDest++ = * strSrc++) != '’ );  //........10分  (通过查阅资料,我认为这个结果并不是满分
 return address;
}

看到这道题后,分数的逐步提高,嗯,的确是。 那看了据该分析一下为什么分数有提高,其实原作者已经写出来,我自己做点自己的理解描述:

1. 使用断言方式检验参数,如果传入的参数中 存在NULL,ok。。。。。gameover。。。。

2. 使用const来约束strSrc,符合程序健壮性原则。凡是是修改试图改动strSrc的内容,编译器将产生错误。

可以参见 楼主其他博文中关于指针常量的讲解。

3. 为了链式编程 。

4. 通过一个例子 对这个问题进行一下解析

5  我算是笨死了不知道站在巨人的肩膀上  巨人的肩膀上(ps:链接)   

 看到这道题后,描述第二个问题 while( (*strDest++ = * strSrc++) != '’ );

1. 我们首先确定问题     优先级 ,  关于c语言符号优先级 已经有帖子描述 。

2. ok,我们举一个上学时候常见的例子。问题:  i++和++i ;

        

#define PRODUCT(X) (X*X)
int main(void)
{
    int i = 3,
        j, k;
    j = PRODUCT(i++);
    k = PRODUCT(++i);

    printf("j = %d, k = %d", j, k);
    return 0;
}

答案  j = 9, k = 49; 关于这个有详细的描述  

http://www.cnblogs.com/rookie2/archive/2012/11/11/2765112.html;

下边 继续我们的话题:

while( (*strDest++ = * strSrc++) != '’ );  我们现在将它进行逐步分级

 1) strDest = *strSrc;

 2) *strSrc != 0;

 3) *strDest ++;

 4)*strSrc ++;

  

        

      

         


 

原文地址:https://www.cnblogs.com/causal360/p/4736135.html