有关strncpy,memcpy,memmove的比较

比如下面这个例子

char src[10]="abcdefg";

下面哪个函数能够使src内容变成‘aabcdefg’

strncpy(src+1,src,7);

memcpy(src+1,src,7);

memmove(src+1,src,7);

 

这涉及源地址和目标地址有重叠的情况。

strncpy原理上仍然是按照顺序一个一个字节的复制,所以输出是‘aaaaaaa’

memmove允许源地址和目标地址重叠,这种复制方式最安全,可以满足要求。

memcpy的输出是aaaccefg.那么它是如何执行的呢,我分别复制不同的字节数,从1-->7发现

它按照内存结构,以1,2,4为基数字节进行复制,比如复制7个,就按照1+2+4的方式,先复制1个,然后复制2个,最后复制剩余4个

abcdefg复制1个变成aacdefg,然后复制2个变成aaacefg,最后复制4个变成aaaccefg.

以上测试均基于Linux gcc编译器

有兴趣的可以试一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值