memcpy的使用、注意及其他

memcpy函数原型为:void *memcpy(void *dest, const void *src, size_t n)

memcpy用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。在c中,很多时候都要用到这个函数,这是一个高效的函数。在使用的时候有几点需要注意:

1 这个函数不会检查参数dest与参数src所指向的数组(或其他类型)是否具有同样的空间。所以如果复制的字节数n超出了dest的空间容量,或者n超出src的容量,这个函数是不会进行判断的,这样就会很危险。这样,就需要程序员自己检查是否有溢出的情况出现。

2 很多时候,我们这样使用memcpy函数

memcpy((void


*)dest,(void


*)src,sizeof


(src));

即将src的全部数据复制到dest中,但在如下情况下要注意sizeof(src)的值。

void


 testfun(const


 double


* arr);
double


 data[10] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0,10.0};
main(){
    testfun(data);    //见上面


}
void


 testfun(const


 double


* arr)
{
    // 值为4,因为这个arr是一个指针,sizeof计算的是"指针"这个类型所占的空间,而"指针"一直都只占4个字节


    sizeof


(arr);  
    // 值为8,因为一个double类型占8个字节


    sizeof


(double


); 
    double


 arr_local[10]={ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0,10.0};
    // 值为10*8=80,因为每个double类型占8个字节(在我电脑上),数组arr_local长度为10。这里的变量arr_local代表的是一个长度为10的数组,注意与arr比较


    sizeof


(arr_local);   
}
 
 

大家可以看到不同时候sizeof的不同表现,这样我们使用sizeof的时候就要留意下了。同样的在使用函数memcpy的时候,实参n的选择就要慎重点了。

c就是这样,要自己管理内存,一不小心就会出错。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值