Chinaunix

标题: glibc的strcpy函数 [打印本页]

作者: kuaizaifeng    时间: 2006-10-23 11:34
标题: glibc的strcpy函数
刚才看了讨论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)
复制代码

作者: nig.daemon    时间: 2006-10-23 12:07
(void) CHECK_BOUNDS_HIGH (src + n);
(void) CHECK_BOUNDS_HIGH (dest + n);

这两句没看懂
这个调用是什么意思?
作者: kuaizaifeng    时间: 2006-10-23 12:18
原帖由 nig.daemon 于 2006-10-23 12:07 发表
(void) CHECK_BOUNDS_HIGH (src + n);
(void) CHECK_BOUNDS_HIGH (dest + n);

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


上面两个调用看懂了吗?
看懂了给我说说
作者: kuaizaifeng    时间: 2006-10-23 14:24
大家给说说阿
作者: chzht001    时间: 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 编辑 ]
作者: wolf0403    时间: 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');
复制代码

功能代码就这么一点而已。其他都是在检查指针指向的范围。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2