1 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
代碼第8行定義的 s 不是數(shù)組! s只是個(gè)指針,指向含有1000個(gè)元素的char數(shù)組。
所以sizeof s只能得到一個(gè)指針?biāo)加玫淖止?jié)數(shù),malloc也只分配了那么一點(diǎn)大的內(nèi)存,并且這段內(nèi)存還被轉(zhuǎn)型成為const char類型了——也就是該段內(nèi)存中的char是不能修改的。然而接受該指針的bob卻是char指針,賦值會有警告的。
在第12行,scanf中的格式化指示符是%s,意味著后面的參數(shù)是字符串(char *類型),但s的類型是指向數(shù)組的指針,所以沒法正確保存輸入到s中。
在第15行,strchr的第一個(gè)參數(shù)需要是const char*或char*類型,同理,你傳入的s的類型也不符合。
如果你想把s當(dāng)作是字符串,直接將其聲明為char數(shù)組即可: char s[1000]; ? 使用時(shí)你要確定這里面保存的char序列是以'\0'結(jié)尾的,否則很多函數(shù)是無法將其視作字符串來處理的。 當(dāng)然scanf在你輸入最后會自動(dòng)加上結(jié)尾的'\0',你不用擔(dān)心這一點(diǎn)。
用malloc申請一個(gè)字符串只需要申請足夠大的內(nèi)存,并將其轉(zhuǎn)型為char *即可。雖說轉(zhuǎn)型為const char *也算能保存字符串,但是這段內(nèi)存中的char都是const的,是無法修改的! 所以你成功申請了這段內(nèi)存也無法向其中寫入。
- 1 回答
- 0 關(guān)注
- 2564 瀏覽
添加回答
舉報(bào)