memcpy复制整型数组相关

————————————————分割线————————————————

分割线以内的博客转载自:https://blog.csdn.net/qq_38993096/article/details/88377285,侵删

C语言:#include<string.h>
C++:#include
void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中,是用指针进行操作的。
注意:
1.strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
2.memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。

strcpy和memcpy主要有以下3方面的区别:
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符""才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
————————————————
版权声明:本文为CSDN博主「fjghgsrfdhbrs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38993096/java/article/details/88377285

memcpy(d,s+12,4);//从第13个字符(V)开始复制,连续复制4个字符(View)到s
d[4]='';//必须有这句,不然字符串会乱码
//memcpy(d,s+12*sizeof(char),4*sizeof(char));也可

函数源码:

void *memcpy(void *dest, const void *src, int count)
{
    void *ptr = dest;
    if (NULL == dest || NULL == src || count <= 0)
    {
        return NULL;
    }
    while (count--)
    *(char *)dest++ = *(char *)src++;
    return ptr;
}

————————————————分割线————————————————

补充整型数组复制相关:

整型数组复制的时候,第三个参数应该为sizeof(int) * size    (同理会有sizeof(long int) * size, sizeof(Node) * size...)

在memcpy的源码中可以看到,复制是以char为地址单元进行的,所以第三个参数只传进size的话,那么将会只复制前size个char地址单元的数据。

int main()
{
    int a[4] = {1, 2, 3, 100};
    int b[3] = {4, 5, 6};
    memcpy(b, a, 4); // 通常int = 4 * char, 所以复制的结果为b = {1, 5, 6}, 只复制了前4个char地址的内容
    memcpy(b, a, sizeof(int) * 3); // 这里的sizeof(int) * 3 == 12, 所以复制结果为b = {1, 2, 3};
    for (int i = 0; i < 3; i++) {
        printf("%d ", b[i]);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/myxdashuaige/p/13258611.html