Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2618254
  • 博文数量: 315
  • 博客积分: 3901
  • 博客等级: 少校
  • 技术积分: 3640
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-08 15:32
个人简介

知乎:https://www.zhihu.com/people/monkey.d.luffy Android高级开发交流群2: 752871516

文章分类

全部博文(315)

文章存档

2019年(2)

2018年(1)

2016年(7)

2015年(32)

2014年(39)

2013年(109)

2012年(81)

2011年(44)

分类: C/C++

2012-10-20 11:29:02


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. /**
  5.  * @brief 达夫设备(拷贝 - 把语言玩成这样,很cool,虽然争议多)
  6.  * @From: dstm Duff
  7.  */
  8. char * dafuStrnCopy(char * dst, const char * from, int count)
  9. {
  10.     char * p = dst;
  11.     register n = (count + 7) / 8; /* count > 0 assumed */
  12.     switch (count % 8)             /* 以8的倍数为基准,不是8的倍数则先把“零头“拷贝,剩下的就循环拷贝!很cool吧.. */
  13.     {
  14.         case 0: do { *dst++ = *from++;
  15.                     case 7: *dst++ = *from++;
  16.                     case 6: *dst++ = *from++;
  17.                     case 5: *dst++ = *from++;
  18.                     case 4: *dst++ = *from++;
  19.                     case 3: *dst++ = *from++;
  20.                     case 2: *dst++ = *from++;
  21.                     case 1: *dst++ = *from++;
  22.                 } while (--n > 0);
  23.     }
  24.     return p;
  25. }

  26. /**
  27.  * @brief 真实从未见过如此用法,挺酷的;虽然看上去代码很多!关键思维方式确实与众不同!
  28.  */
  29. int main(int argc, const char *argv[])
  30. {
  31.     char * dst = NULL;
  32.     char * from = "kissm";

  33.     dst = (char *)malloc(32 * sizeof(char));
  34.     if (!dst)
  35.         return -1;

  36.     dafuStrnCopy(dst, from, strlen(from));
  37.     printf("%s\n", dst);

  38.     free(dst);

  39.     return 0;
  40. }

阅读(2151) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~