用memcpy拷贝数组前半部分到后半部分的问题

lx_xproer 2008-11-03 12:00:30

int Maze[TILES_V][TILES_H];
for(int k=0;k<size/2;k++)
temp[k] = Random_Int(0,14);
memcpy(temp+size/2,temp,size/2);
random_shuffle(temp,temp+size);


问题在:从Maze[5][0]开始后面的数据都是0。
请问为什么memcpy没有将这个数组的前半部分完整的拷贝给后半部分呢?
...全文
513 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhs_lh04 2008-11-03
  • 打赏
  • 举报
回复
size=sizeof(int) * TILES_V*TILES_H;

yh4130a 2008-11-03
  • 打赏
  • 举报
回复
你的temp 依然是数组啊...
机智的呆呆 2008-11-03
  • 打赏
  • 举报
回复


memcpy((char*)(temp+size/2),(char*)temp,size*2);

试试~~~
lx_xproer 2008-11-03
  • 打赏
  • 举报
回复
不好意思,我把代码从新贴一下。

int size = TILES_V*TILES_H;
int *temp = &Maze[0][0];
for(int k=0;k<size/2;k++)
temp[k] = Random_Int(0,14);
memcpy(temp+size/2,temp,size/2);
random_shuffle(temp,temp+size);

yh4130a 2008-11-03
  • 打赏
  • 举报
回复
temp[]是叔祖
temp + 1
与 void* temp;
temp + 1;是不一样的..

temp+size/2这个应该是定位不准
lx_xproer 2008-11-03
  • 打赏
  • 举报
回复
size=TILES_V*TILES_H
lx_xproer 2008-11-03
  • 打赏
  • 举报
回复
改char*还是不行。在群里高手给出了函数
typedef signed int INT4;
typedef unsigned int UINT1;
void memcpy(void *_pDst, /* [out] 存放拷贝数据的缓存地址*/
void *_pSrc, /* [in] 原数据缓存地址 */
INT4 iNum)
{
INT4 i;
UINT1 *ucdst, *ucsrc;

if(_pDst < _pSrc)
{
ucdst = (UINT1 *)_pDst;
ucsrc = (UINT1 *)_pSrc;
for (i = 0; i < iNum; i++)
{
*ucdst++ = *ucsrc++;
}
}
else
{
ucdst = (UINT1 *)_pDst + (iNum - 1);
ucsrc = (UINT1 *)_pSrc + (iNum - 1);
for(i = 0; i < iNum; i++)
{
*ucdst-- = *ucsrc--;
}
}
return ;
}
解决了库函数memcpy对p补长操作不一致的问题!

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧