我正在使用memmove()
,但似乎目的地正在覆盖源或者我不明白覆盖是什么。我有一个char
(目的地)数组,然后是一个指向目的地的指针,它位于矢量内。
char destination[]="abcdefg";
char * source = destination+3;
来源为"defg"
。然后我使用memmove()
移动四个字符并打印源。当我查看源代码时,它已更改为"gefg"
。
printf("%s\n",memmove(destination,source,sizeof(char)*4));
printf("%s",source);
我认为memmove()
应该阻止覆盖,或者我可能不理解。
答案 0 :(得分:3)
memmove
允许源和目标具有重叠区域,并且定义它以使memmove
之前的源内容在memmove
之后比较等于目标的内容}。
如果源和目标重叠,您会发现在memmove
调用后,源会以某种方式发生更改。可以预防的是可能的目的地腐败。
memmove(dst, src, len)
的行为类似于:
char buf[len];
memcpy(buf, src, len);
memcpy(dst, buf, len);
但是实现被优化为只进行一次传递,而不是两次传递。