1. 程式人生 > >memcpy不能復制內存重疊區域

memcpy不能復制內存重疊區域

dst code 區域 col har emc pre 字符 cde

下面s和s2指向的內存區域有重疊,memcpy不能正確復制,src賦值給dst時,可能會修改自身的值

char s[] = "abcdefghij";
char *s2 = s + 4;
memmove(s2, s, strlen(s2)+1);//s2的最後一個未知 為‘\0‘字符,從s位置開始復制,不能多一個元素覆蓋了結尾的‘\0‘
cout << s2 << endl;//只復制strlen(s2)個字節,s2輸出abcdef,strlen(s2)的值為6
cout << strlen(s2) << endl;//復制strlen(s2)+1個字節,s2結尾不是‘\0‘,strlen(s2)的值為23

s2的位置是第4個,s是第0個,strlen(s2)的長度為efghij占用的內存空間,共五個字節

重疊分兩種情況,src的位置在dst指向區域子內,dst位置在src之內

memcpy不能復制內存重疊區域