glibc | strcpy

strcpy 代码不长,解读我都写到相应位置的注释里面了。

源码如下:

 1 /* Copy SRC to DEST.  */
 2 char *
 3 strcpy (dest, src)
 4      char *dest;
 5      const char *src;
 6 {
 7   reg_char c;  // 将 c 放入寄存器
 8   char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src);
 9   const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1;  // 这里用 off 优化了寻址,s++ 后直接 s[off] 就行了。
10   size_t n;
11 
12   do
13     {
14       c = *s++;
15       s[off] = c;
16     }
17   while (c != '\0');
18 
19   n = s - src;
20   (void) CHECK_BOUNDS_HIGH (src + n);
21   (void) CHECK_BOUNDS_HIGH (dest + n);
22 
23   return dest;
24 }
25 libc_hidden_builtin_def (strcpy)

 

posted on 2015-10-01 22:53  Excavator  阅读(155)  评论(0编辑  收藏  举报

导航