第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

我想把其中的數(shù)組s變成const char*,怎么利用malloc,或者有其他的辦法

我想把其中的數(shù)組s變成const char*,怎么利用malloc,或者有其他的辦法

C
mrs_empress 2016-11-19 00:01:02
#include?<stdio.h> #include?<string.h> #include?<stdlib.h> #include?<malloc.h> int?main(){ ????char?(*s)[1000]; ????char?*p; ????char?*bob; ????int?length; ????scanf("%s",s); bob=(const?char?*)malloc(sizeof(s)); ????p=strchr(s,'a'); ????if(p) ????????printf("%s",p); ????else ????????printf("Not?Found!"); ????return?0; }
查看完整描述

1 回答

已采納
?
onemoo

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)存也無法向其中寫入。

查看完整回答
反對 回復(fù) 2016-11-19
  • mrs_empress
    mrs_empress
    其實(shí)我想實(shí)現(xiàn)輸入一段字符串;輸出第一個(gè)字母a出現(xiàn)的位置。我想用strchr來實(shí)現(xiàn),但他必須是const char,所以我想轉(zhuǎn)化類型。我想請教一下,如果我要實(shí)現(xiàn)這個(gè)功能,并用到strchr函數(shù)該怎么做
  • onemoo
    onemoo
    strchr的第一個(gè)參數(shù)類型確實(shí)為const char*,正如我回答中所說,并不是只能傳入const char*類型,也可以傳入char*類型。 指向const類型的指針可以用指向非const類型的指針來初始化/賦值(反之不可),所以這樣傳參是可行的。
  • 1 回答
  • 0 關(guān)注
  • 2564 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號