memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。拷贝的是n个字节,但是必须在dest的范围之内。
函数原型为void *memcpy(void*dest, const void *src, size_t n);
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;
}
示例函数,memcpy与malloc的使用。
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <gst/gst.h>
#include <string.h>
#define SIZE 1024
int main()
{
uint64_t temp = 2147483647;
uint64_t *chunk;
int a;
int *aa=&a;
chunk = (uint64_t *)malloc(SIZE);
if(chunk == NULL)
{
printf("malloc failed!\n");
return -1;
}
printf("temp%ld\n",sizeof(temp));
printf("temp%ld\n",temp);
*chunk = temp;
memcpy(aa, chunk,4);
printf("contain:%d\n",*aa);
free(chunk);
return 0;
}
如果
memcpy(aa, chunk,1 );//只会打印一个字节的范围255,如果是2,则会打印65535
如果temp的范围超过4个字节,打印就会出错。因为aa是int类型的,最大只有4个字节,因此不能超过4个字节。如果int *a 也使用malloc函数进行空间分配,只要不超出SIZE就不会出粗。
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <gst/gst.h>
#include <string.h>
#define SIZE 1024
int main()
{
uint64_t temp = 2147483647;
uint64_t *chunk;
int *a;
chunk = (uint64_t *)malloc(SIZE);
a = (int *)malloc(SIZE);
if(chunk == NULL)
printf("malloc failed!\n");
printf("temp%ld\n",sizeof(temp));
printf("temp%ld\n",temp);
*chunk = temp;
memcpy(a, chunk,SIZE);
printf("contain:%d\n",*a);
free(chunk);
free(a);
return 0;
}
NOTE:mencpy是内容拷贝,并不是简单的地址赋值。所以后面的n应该是分配的内存空间的大小。