memcpy与malloc函数

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应该是分配的内存空间的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值