C语言memcpy函数误解

本文揭示了memcpy()函数的正确使用方法,避免数据复制错误,并解释了其原理及常见误解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



昨晚发现用memcpy()函数时,数据复制不完整,一直以为是逻辑问题,今天再度断点到函数进行时,单步调试(好在是VC,比单片机方便多了),在网上查看也有人不知为什么没有完全复制过去数据,于是查了MSDN才发现有问题.

发现一直理解错了,下面看实例.

int iFree[MAX], iUsed[MAX] iUsedBlk[MAX], iFreeBlk[MAX];
int iFreeCnt, iUsedCnt;
	
memcpy(iFree, iFreeBlk, iFreeCnt);
memcpy(iUsed, iUsedBlk, iUsedCnt);

这里无法把iFreeBlk[]里的数据全部copy到iFree去,只复制了一部分,查看资料才恍然大悟,memcpy复制的是内存的值,应该以byte为基本单位,那么iFreeCnt就不够整个iFreeBlk的大小了,应该用iFreeCnt*sizeof(int),这样才能把整个数据复制过去.

memcpy()时,我总会习惯性的理解为把同样数据结构的数据复制过去(错了!都是搞单片机整天都是BYTE的惯性思维!).以后长记性了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值