玉倾城 2015-10-09 08:28 采纳率: 0%
浏览 1854

mencpy存在内存重叠时无论前向后向复制都会出现问题,哪位大神可以来解释一下?

下面是我的测试代码:

 #include <stdio.h>
#include <string.h>
int main(void)
{
char s[]="abcdefghigklmnopqrstuvwxyz abcdefghigklmnopqrstuvwxyz";
memmove(s,s+7,strlen(s)+1-7);
printf("Memmove result forward  : %s\n",s);

char s1[]="abcdefghigklmnopqrstuvwxyz abcdefghigklmnopqrstuvwxyz";
memcpy(s1,s1+7,strlen(s1)+1-7);
printf("Memcpy result forward   : %s\n",s1);

char s2[]="abcdefghigklmnopqrstuvwxyz abcdefghigklmnopqrstuvwxyz";
memmove(s2+7,s2,strlen(s2)+1-7);
printf("Memmove result afterward: %s\n",s2);

char s3[]="abcdefghigklmnopqrstuvwxyz abcdefghigklmnopqrstuvwxyz";
memcpy(s3+7,s3,strlen(s3)+1-7);
printf("Memcpy result afterward : %s\n",s3);
getchar();
return 0;
}

运行的结果为:
Memmove result forward : higklmnopqrstuvwxyz abcdefghigklmnopqrstuvwxyz
Memcpy result forward : higklmnopqrstuvcdlmnopqrsmnopqrsmnopqrstuvwxyz
Memmove result afterward: abcdefgabcdefghigklmnopqrstuvwxyz abcdefghigklmnopqrst
Memcpy result afterward : abcdefgabcdefghigklmnoigklmnopgklmnopxefghigklmnopqrst

  • 写回答

2条回答 默认 最新

  • oyljerry 2015-10-09 10:19
    关注

    你应该用memmove API,它可以避免重叠的问题

    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
  • ¥15 SENT协议中相关问题咨询
  • ¥15 URL地址href跳转问题