memcpy()不会停止复制

时间:2011-04-05 21:58:29

标签: c memcpy

  

可能重复:
  Problem when copying memory

(tuple1和tuple2是传递给此函数的void指针)

char *data;

data = (char*) calloc (84, 1);

memcpy(data, tuple1, 44);

memcpy(data+44, tuple2, 40);

我为数据分配了84个字节。我正在做第一个内存复制memcpy(data,tuple1,44);它将44个字节从tuple1的地址复制到数据的地址,当我尝试读取数据时,它发现它已经在前44个字节的数据上复制了tuple1的字节,然后再次复制了44个字节的tuple1直到它填满了为数据分配的84个字节。

当我进行第二次内存复制时,我尝试在数据地址之后粘贴40字节的tuple2 44字节。实际上它与tuple1完全相同,甚至更多 - 它从数据地址开始粘贴,而不是在数据地址之后粘贴44个字节。

为什么?!我该如何预防呢?任何人都有帮助,我非常绝望。

3 个答案:

答案 0 :(得分:0)

tuple1tuple2的定义是什么?他们至少分别是44和40(分别)?他们是否可能指向与data相同的记忆?

答案 1 :(得分:0)

如果您将数据视为字符串,则可能缺少空终止符。

您已使用calloc将内存初始化为零,但如果您已覆盖每个字节,则没有任何内容可以终止该字符串。

答案 2 :(得分:-1)

你应该使用地址。

memcpy(&data, &tuple1, 44);

memcpy(&data+44, &tuple2, 40);

可能会有所帮助。