#includevoid func(char *str){char *p = str;printf("%s\n",str);while(*p != '\0'){if(*p == ' '){memcpy(p,p+1,strlen(p+1)+1);p--;printf("%s\n",str);}p++;}}int main(int argc , char *argv[]){char str[] = "1 2 3 4 5 6 7 8 9";func(str);return 0;}將字符串中的空格去掉,使用memmove函數(shù)不會出問題,但用memcpy則會出現(xiàn)問題,每次調(diào)用的結(jié)果是:1 2 3 4 5 6 7 8 912 3 4 5 6 7 8 9123 4 5 7 8 9 //6沒了1234 5 7 8 912345 7 8 912345 8 9 //7沒了12345 8 9123458 99 //多了一個912345899但是根據(jù)網(wǎng)上搜到的memcpy函數(shù)實現(xiàn)過程,自己重寫的memcpy,調(diào)用后的結(jié)果一切正常。網(wǎng)上搜到的memcpy函數(shù)實現(xiàn),據(jù)此重寫的memcpy函數(shù)調(diào)用結(jié)果正常:04 void *memcpy(void *s1, const void *s2, register size_t n)05 {06 register char *p1 = s1;07 register const char *p2 = s2;0809 if (n) {10 n++;11 while (--n > 0) {12 *p1++ = *p2++;13 }14 }15 return s1;16 }究竟是怎么回事?是內(nèi)存重疊的問題嗎?望高手不吝賜教。又試了幾遍,在pc機上無論是windows還是linux下編譯運行一切正常,在服務(wù)器上(CPU為Xeon E5-2600)編譯運行會出現(xiàn)此問題。
求指教關(guān)于memcpy()函數(shù)內(nèi)存重疊問題
小唯快跑啊
2022-03-21 10:10:20