画载舟中 发表于 2019-10-2 11:34:27

memcpy 和 memmove 的问题

本帖最后由 画载舟中 于 2019-10-3 06:30 编辑

#include<stdio.h>
#include<string.h>

int main()
{
        char s[] = "123456789";
        char *p1=s;
        char *p2=s+2;
        printf("p2=%s\n",p2);                                                //p2=3456789
       
        memcpy(p2,p1,5);
        printf("memcpr(p2,p1,5)\n p2 = %s\n",p2);                        //p2= 1234589
       
        memmove(p2,p1,5);
        printf("memmove(p2,p1,5)\np2 = %s",p2);                        //p2=1212389
       
        return 0;
}

为什么        
        memmove(p2,p1,5);
        printf("memmove(p2,p1,5)\np2 = %s",p2);                        //p2=1212389??为什么得出这个值?

人造人 发表于 2019-10-2 20:57:32

我看懂了,你再看一看这个,看看能不能理解

#include<stdio.h>
#include<string.h>

int main()
{
        char s[] = "123456789";
        char *p1 = s;
        char *p2 = s + 2;
        printf("p1 = %s\tp2 = %s\n", p1, p2);

        memcpy(p2, p1, 5);
        printf("p1 = %s\tp2 = %s\n", p1, p2);

        memmove(p2, p1, 5);
        printf("p1 = %s\tp2 = %s\n", p1, p2);

        return 0;
}

/*
p1 = 123456789p2 = 3456789
p1 = 121234589p2 = 1234589
p1 = 121212389p2 = 1212389
请按任意键继续. . .
*/

画载舟中 发表于 2019-10-3 06:42:03

人造人 发表于 2019-10-2 20:57
我看懂了,你再看一看这个,看看能不能理解

嗯...刚上机 测试了下 为什么第一次拷贝时 p1的 数据会改变呢?

人造人 发表于 2019-10-3 11:46:03

画载舟中 发表于 2019-10-3 06:42
嗯...刚上机 测试了下 为什么第一次拷贝时 p1的 数据会改变呢?

因为p1和p2重叠了
页: [1]
查看完整版本: memcpy 和 memmove 的问题