亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

下面這個情況是,設已有定義: char *st="how are you"; 請問正確的是?

下面這個情況是,設已有定義: char *st="how are you"; 請問正確的是?

慕尼黑的夜晚無繁華 2021-07-21 17:15:55
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"所占的內存。



查看完整回答
反對 回復 2021-07-25
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

st被定義為指針類型,由C自動分配內存首址,并且包括首址在內的連續向后12個內存地址內各存放一個字符,等價于char st[]="how are you"。
如果是全局變量,程序沒執行完畢就一直不會釋放,由于定義指針st時已經賦值,st也不會指向其他已被占用的有用內存地址。這么說吧,它除了在被引用時和直接定義的不定長度數組略有區別(比如數組名不能自增自減),其余都是可以相互交換使用的。

查看完整回答
反對 回復 2021-07-25
  • 2 回答
  • 0 關注
  • 628 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號