- /* 代码风格应该是K&R风格 */
- char *
-
strcpy (dest, src)
-
char *dest;
-
const char *src;
-
{
-
reg_char c;
- /*
- 关于__unbounded和CHECK_BOUNDS_LOW,可以不作理会,可使其为空的宏定义。
- 引入这两个宏的原因是因为bounded pointer,其定义参见wiki:
- */
-
char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src);
/*
计算目的地址dest与源地址s的偏移-1的值。之所以要减去1,是因为后面的代码。
*/
-
const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1;
-
size_t n;
-
-
do
-
{
-
c = *s++;
- /* 前面计算偏移的时候多减了一个1,就因为上一个语句s进行了自加运算 */
-
s[off] = c;
-
}
-
while (c != '\0');
/* 这部分代码也可以无视 */
-
n = s - src;
-
(void) CHECK_BOUNDS_HIGH (src + n);
-
(void) CHECK_BOUNDS_HIGH (dest + n);
-
-
return dest;
-
}