我正在浏览memmove()与memcpy()Stack Overflow 相关的各种问题.
这篇文章暗示如果源地址(要复制的数据)大于目标地址(要复制的数据),它将执行正向复制,否则将执行向后复制.
为什么会那样?我尝试了两种情况下的复制,并且完美无缺,没有任何错误.
你能详细说明吗?我没理由.
编辑:这就是我的意思:
#include <memory.h>
#include <string.h>
#include <stdio.h>
void *memmoveCustom(void *dest, const void *src, size_t n)
{
unsigned char *pd = (unsigned char *)dest;
const unsigned char *ps = (unsigned char *)src;
if ( ps < pd )
for (pd += n, ps += n; n--;)
*--pd = *--ps;
else
while(n--)
*pd++ = *ps++;
return dest;
}
int main( void )
{
printf( "The string: %s\n", str1 );
memmoveCustom( str1 + 1, str1, 9 );
printf( "Implemented memmove output: %s\n", str1 );
getchar();
}
Run Code Online (Sandbox Code Playgroud)
上面的程序是一个实现自定义memmove()函数的示例代码.在函数内部,您可以看到源地址大于目标地址的时间,它执行正向复制,否则它将n位置添加到现有地址并从后向执行复制.而已.
das*_*ght 15
如果源地址(要复制的数据)大于目标地址(要复制的数据),它将执行正向复制,否则将执行向后复制.
只有当这是重要from和to范围重叠.对于非重叠范围,复制方向无关紧要.
重叠范围很重要,因为如果从头开始复制,则会在复制之前销毁源数据.
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |