有关strncpy,memcpy,memmove的比较

来源:互联网 发布:筒仓设计软件 编辑:程序博客网 时间:2024/05/22 16:54

比如下面这个例子

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编译器

有兴趣的可以试一下。

原创粉丝点击