免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2332 | 回复: 5
打印 上一主题 下一主题

[函数] glibc的strcpy函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-23 11:34 |只看该作者 |倒序浏览
刚才看了讨论memcpy的帖子,于是把glibc的代码找出来看了看
顺便看了看strcpy的实现,顿时就晕菜了
想请教大家strcpy是怎么实现的,如果自己用标准C写一个,应该如何写?
应该注意哪些问题?
谢谢了先

  1. #include <stddef.h>
  2. 20 #include <string.h>
  3. 21 #include <memcopy.h>
  4. 22 #include <bp-checks.h>
  5. 23
  6. 24 #undef strcpy
  7. 25
  8. 26 /* Copy SRC to DEST.  */
  9. 27 char *
  10. 28 strcpy (dest, src)
  11. 29      char *dest;
  12. 30      const char *src;
  13. 31 {
  14. 32   reg_char c;
  15. 33   char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src);
  16. 34   const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1;
  17. 35   size_t n;
  18. 36
  19. 37   do
  20. 38     {
  21. 39       c = *s++;
  22. 40       s[off] = c;
  23. 41     }
  24. 42   while (c != '\0');
  25. 43
  26. 44   n = s - src;
  27. 45   (void) CHECK_BOUNDS_HIGH (src + n);
  28. 46   (void) CHECK_BOUNDS_HIGH (dest + n);
  29. 47
  30. 48   return dest;
  31. 49 }
  32. 50 libc_hidden_builtin_def (strcpy)
复制代码

论坛徽章:
0
2 [报告]
发表于 2006-10-23 12:07 |只看该作者
(void) CHECK_BOUNDS_HIGH (src + n);
(void) CHECK_BOUNDS_HIGH (dest + n);

这两句没看懂
这个调用是什么意思?

论坛徽章:
0
3 [报告]
发表于 2006-10-23 12:18 |只看该作者
原帖由 nig.daemon 于 2006-10-23 12:07 发表
(void) CHECK_BOUNDS_HIGH (src + n);
(void) CHECK_BOUNDS_HIGH (dest + n);

这两句没看懂
这个调用是什么意思?


上面两个调用看懂了吗?
看懂了给我说说

论坛徽章:
0
4 [报告]
发表于 2006-10-23 14:24 |只看该作者
大家给说说阿

论坛徽章:
0
5 [报告]
发表于 2006-10-23 15:56 |只看该作者
char *strcpy(char *dest, const char *src)
{
  char *tmp = dest;
  while((*dest++ = *src++) != '\0')
    ;
  return tmp;
}

仅代表个人看法 ^_^

[ 本帖最后由 chzht001 于 2006-10-23 15:57 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-10-25 12:36 |只看该作者
  1. 37   do
  2. 38     {
  3. 39       c = *s++;
  4. 40       s[off] = c;
  5. 41     }
  6. 42   while (c != '\0');
复制代码

功能代码就这么一点而已。其他都是在检查指针指向的范围。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP