在Zlib算法中我们有解码功能。这个函数叫做膨胀。在函数结束时,我们需要将字节复制到输出。 示例:(full code)
password
在这个例子中,我们通过递增指针来复制字节。所以我们有"复制"迭代。 我有疑问:为什么我们不能只使用memcpy(put,from,copy)(以及之后的增量指针)来代替循环? 为什么在某些情况下我们会得到错误的解码结果(当我们用8kb块编码时)?
关于错误的结果:在解码结果中我们可以有单位化的字节(一点点)。好像memcpy从非初始化内存中复制一些字节。
答案 0 :(得分:2)
我无法使用memcpy()
,也无法使用memmove()
。原因是副本经常重叠,目的是复制刚刚复制的字节。 memcpy()
对重叠的源和目标块的行为是 undefined 。在这种情况下,memmove()
的行为已经完全定义,但正好与所需内容的相反,其中memmove()
避免复制刚刚复制的数据。
我不知道你做了什么导致错误的结果,但那里的副本永远不会从未初始化的内存中复制。