读glibc的strcpy代码

C语言字符串复制深入解析
本文深入探讨了C语言中字符串复制函数strcpy的实现细节,包括如何使用ptrdiff_t获取地址偏移,以及如何通过const关键字保护源字符串不被修改。此外,文章还介绍了如何避免宏定义冲突,并给出了具体的代码实现。
//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)

 

转载于:https://www.cnblogs.com/ZhanKing/p/10217216.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值