第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求指教關(guān)于memcpy()函數(shù)內(nèi)存重疊問題

求指教關(guān)于memcpy()函數(shù)內(nèi)存重疊問題

#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)此問題。
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻1827條經(jīng)驗 獲得超9個贊

1 2 3 4 5 6 7 8 9
12 3 4 5 6 7 8 9
123 4 5 6 7 8 9
1234 5 6 7 8 9
12345 6 7 8 9
123456 7 8 9
1234567 8 9
12345678 9
123456789
CentOS測試。
童鞋,別測試了。不同系統(tǒng)下的實現(xiàn)是不完全一樣的。出現(xiàn)這種錯誤情況,說明在這個系統(tǒng)下此函數(shù)這么用就會出錯。想避免出錯就需要避免用這種寫法。



查看完整回答
反對 回復(fù) 2022-03-23
  • 1 回答
  • 0 關(guān)注
  • 218 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號