1 回答

TA貢獻1963條經驗 獲得超6個贊
用調試觀察一下就知道問題在哪了
首先以char a[20] = "abc";
的形式,在內存里數據是這樣的:
0x60fefc: 61 62 63 00 00 00 00 00|00 00 00 00 00 00 00 00
0x60ff0c: 00 00 00 00 3d 00 00 00|00 80 3f 00 94 ff 60 00
"abc"后面跟了17個'0'
第二種方式char a[20]; scanf("%s",a);
,在內存里數據是這樣的:
0x60fefc: 61 62 63 00 b0 19 40 00|45 00 00 00 08 00 00 00
0x60ff0c: 3d 00 00 00 3d 00 00 00|00 b0 32 00 94 ff 60 00
"abc"后面只有1個'0',后面就不知道是什么亂七八糟的東西了
你程序里的StrLength()函數是自己實現的嗎?我姑且當成strlen,strlen是以'\0'為判斷字符結束,從而計算長度
而第二種方式執行的時候,以下語句:
for (j = 0; j < StrLength(s) - i + 1; j++) *(p1 + StrLength(s) + StrLength(t) - i - j) = *(p1 + StrLength(s) - i - j);
執行第一次*(p1 + 2) = *(p1 + 1)
后,內存里的數據變成這樣:
0x60fefc: 61 62 63 63 b0 19 40 00|45 00 00 00 08 00 00 00
0x60ff0c: 3d 00 00 00 3d 00 00 00|00 b0 32 00 94 ff 60 00
看到了嗎,字符串結束的標志'\0'被覆蓋了,下次再執行strlen時,字符串的長度就跟預期不一樣了
- 1 回答
- 0 關注
- 611 瀏覽
添加回答
舉報