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)