读glibc的strcpy代码

//ptrdiff_t是在stddef.h中定义的
#include <stddef.h>
#include <string.h>
//这个我也不知道是干啥的,如果知道望指出
#include <memcopy.h>

//这个应该是为了防止冲突吧
#undef strcpy

/* Copy SRC to DEST. */
//这里把src设置为const就是为了防止修改src
char *
strcpy(dest, src)
char *dest;
const char *src;
{
//定义一个临时变量用于拷贝字符串
char c;
//因为src是个常量不能作为左值
char *s = (char *)src;
//获得dest和src地址的偏移量
const ptrdiff_t off = dest - s - 1;

do
{
//获取src的第一个字符,同时移动了s指针,off多减了一是因为这里先位移了
c = *s++;
//通过s[off]获取dest的地址并赋值
s[off] = c;
//读到'\0'为止
} while (c != '\0');

return dest;
}
//这个好像是定义内部符号别名,要是有错请指出
libc_hidden_builtin_def(strcpy)

猜你喜欢

转载自www.cnblogs.com/ZhanKing/p/10217216.html