博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中关于strcry 引发的思考
阅读量:5058 次
发布时间:2019-06-12

本文共 1649 字,大约阅读时间需要 5 分钟。

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

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

    

void strcpy( char *strDest, char *strSrc ){  while( (*strDest++ = * strSrc++) != '\0’ );   // ........................................2分}

 

void strcpy( char *strDest, const char *strSrc ) //将源字符串加const,表明其为输入参数,加2分{  while( (*strDest++ = * strSrc++) != '\0’ );   // ........................................4分}

 

 

void strcpy(char *strDest, const char *strSrc) { //对源地址和目的地址加非0断言,加3分 assert( (strDest != NULL) && (strSrc != NULL) );   while( (*strDest++ = * strSrc++) != '\0’ );  //............................................7分}

 

 

char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest;  while( (*strDest++ = * strSrc++) != '\0’ );  //........10分  (通过查阅资料,我认为这个结果并不是满分) return address;}

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

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

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

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

3. 为了链式编程 。

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

5  我算是笨死了不知道站在巨人的肩膀上     

 

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

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

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

        

#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++) != '\0’ );  我们现在将它进行逐步分级

 1) strDest = *strSrc;

 2) *strSrc != 0;

 3) *strDest ++;

 4)*strSrc ++;

 

  

 

 

 

 

        

 

      

         

 

 

 

转载于:https://www.cnblogs.com/causal360/p/4736135.html

你可能感兴趣的文章
Mongo自动备份
查看>>
求助大神!怎样批量删除数据库表中某个字段中同样的一段字符!
查看>>
VMWARE虚拟机无法访问的三种方法分析
查看>>
enq: SQ - contention
查看>>
cer证书签名验证
查看>>
面向对象设计
查看>>
ant 安装
查看>>
新手Python第一天(接触)
查看>>
vue路由动态加载
查看>>
【原】UIWebView加载本地pdf、doc等文件
查看>>
iOS中ARC内部原理
查看>>
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
你不得不了解的应用容器引擎---Docker
查看>>
easyui datagrid 弹出页面会出现两个上下滚动条处理办法!
查看>>
迭代器和生成器
查看>>
MYSQL分区表功能测试简析
查看>>
codevs 1080 线段树练习
查看>>
JS模块化库seajs体验
查看>>
Android内核sysfs中switch类使用实例
查看>>