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

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

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

我想把其中的數組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貢獻883條經驗 獲得超454個贊

代碼第8行定義的 s 不是數組! s只是個指針,指向含有1000個元素的char數組。

所以sizeof s只能得到一個指針所占用的字節數,malloc也只分配了那么一點大的內存,并且這段內存還被轉型成為const char類型了——也就是該段內存中的char是不能修改的。然而接受該指針的bob卻是char指針,賦值會有警告的。


在第12行,scanf中的格式化指示符是%s,意味著后面的參數是字符串(char *類型),但s的類型是指向數組的指針,所以沒法正確保存輸入到s中。


在第15行,strchr的第一個參數需要是const char*或char*類型,同理,你傳入的s的類型也不符合。


如果你想把s當作是字符串,直接將其聲明為char數組即可: char s[1000]; ? 使用時你要確定這里面保存的char序列是以'\0'結尾的,否則很多函數是無法將其視作字符串來處理的。 當然scanf在你輸入最后會自動加上結尾的'\0',你不用擔心這一點。


用malloc申請一個字符串只需要申請足夠大的內存,并將其轉型為char *即可。雖說轉型為const char *也算能保存字符串,但是這段內存中的char都是const的,是無法修改的! 所以你成功申請了這段內存也無法向其中寫入。

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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