1 回答

TA貢獻1963條經(jīng)驗 獲得超6個贊
用調(diào)試觀察一下就知道問題在哪了
首先以char a[20] = "abc";
的形式,在內(nèi)存里數(shù)據(jù)是這樣的:
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);
,在內(nèi)存里數(shù)據(jù)是這樣的:
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()函數(shù)是自己實現(xiàn)的嗎?我姑且當成strlen,strlen是以'\0'為判斷字符結(jié)束,從而計算長度
而第二種方式執(zhí)行的時候,以下語句:
for (j = 0; j < StrLength(s) - i + 1; j++) *(p1 + StrLength(s) + StrLength(t) - i - j) = *(p1 + StrLength(s) - i - j);
執(zhí)行第一次*(p1 + 2) = *(p1 + 1)
后,內(nèi)存里的數(shù)據(jù)變成這樣:
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
看到了嗎,字符串結(jié)束的標志'\0'被覆蓋了,下次再執(zhí)行strlen時,字符串的長度就跟預期不一樣了
- 1 回答
- 0 關注
- 620 瀏覽
添加回答
舉報