C语言memcpy函数误解

来源:互联网 发布:unix和linux的区别 编辑:程序博客网 时间:2024/04/30 14:47


昨晚发现用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的惯性思维!).以后长记性了!