为什么使用指针的复制与Memove不相同

问题描述 投票:0回答:1
为什么在循环中使用指针复制:

for (int i = 0; i < size; i++) { dst[i] = src[i]; }
与memove不同:

memmove(dst, src, size);
当我们在SRC和DST之间重叠时?

c copy overlap
1个回答
0
投票
您复制代码可能会在复制之前更改一些源元素。此代码的输出:

#include <stdio.h> #include <string.h> static void Copy(char *dst, const char *src, size_t size) { for (int i = 0; i < size; ++i) dst[i] = src[i]; } int main(void) { char b0[3] = { 'A', 'B', 'C' }; char b1[3] = { 'A', 'B', 'C' }; memmove(b0+1, b0+0, 2); printf("After memmove: b0[1] = %c, b0[2] = %c.\n", b0[1], b0[2]); Copy(b1+1, b1+0, 2); printf("After Copy: b1[1] = %c, b1[2] = %c.\n", b1[1], b1[2]); }
IS:

MemMove之后:B0 [1] = A,B0 [2] =B。 复制后:b1 [1] = a,b1 [2] = A。

	
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.