A) char a[11], *p; strcpy(p=a+1,&st[4]);B) char a[11]; strcpy(++a, st);C) char a[11]; strcpy(a, st);D) char a[], *p; strcpy(p=&a[1],st+2);能不能分析下錯在哪里?
2 回答

SMILET
TA貢獻1796條經驗 獲得超4個贊
char *st="how are you";
這個定義有問題吧。。。字符串沒地方放呀。。。
應該是
char st[]="how are you";
A 對。
B a是數組名,沒法自增。
C a只有11個字符,而st有11個字符,再加上一個'\0'是12個,不夠用。
D 沒給a的長度。
那這些內存什么時候釋放呢?
比如
char st[]="how are you";
是在聲明所在的函數結束的時候釋放,但是
char *st="how are you";
這樣聲明的話,st指針可以指向別的東西。就不可能在這個指針消亡的時候釋放掉"how are you"所占的內存。

翻翻過去那場雪
TA貢獻2065條經驗 獲得超14個贊
st被定義為指針類型,由C自動分配內存首址,并且包括首址在內的連續向后12個內存地址內各存放一個字符,等價于char st[]="how are you"。
如果是全局變量,程序沒執行完畢就一直不會釋放,由于定義指針st時已經賦值,st也不會指向其他已被占用的有用內存地址。這么說吧,它除了在被引用時和直接定義的不定長度數組略有區別(比如數組名不能自增自減),其余都是可以相互交換使用的。
- 2 回答
- 0 關注
- 628 瀏覽
添加回答
舉報
0/150
提交
取消