ZLib和memcpy

时间:2018-03-13 11:22:16

标签: c zlib memcpy

在Zlib算法中我们有解码功能。这个函数叫做膨胀。在函数结束时,我们需要将字节复制到输出。 示例:(full code

password

在这个例子中,我们通过递增指针来复制字节。所以我们有"复制"迭代。 我有疑问:为什么我们不能只使用memcpy(put,from,copy)(以及之后的增量指针)来代替循环? 为什么在某些情况下我们会得到错误的解码结果(当我们用8kb块编码时)?

关于错误的结果:在解码结果中我们可以有单位化的字节(一点点)。好像memcpy从非初始化内存中复制一些字节。

1 个答案:

答案 0 :(得分:2)

我无法使用memcpy(),也无法使用memmove()。原因是副本经常重叠,目的是复制刚刚复制的字节。 memcpy()对重叠的源和目标块的行为是 undefined 。在这种情况下,memmove()的行为已经完全定义,但正好与所需内容的相反,其中memmove()避免复制刚刚复制的数据。

我不知道你做了什么导致错误的结果,但那里的副本永远不会从未初始化的内存中复制。