Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91221
  • 博文数量: 99
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-20 21:29
文章分类

全部博文(99)

文章存档

2013年(5)

2012年(94)

我的朋友

分类:

2012-10-22 17:23:30


点击(此处)折叠或打开

  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. }

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