3 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
內(nèi)容太長(zhǎng),我另寫(xiě)一個(gè)回答:
對(duì)于不確定將要存儲(chǔ)多少個(gè)字符的情形,你只能先定義一個(gè)足夠長(zhǎng)的數(shù)組,比如char s[256]; ?
在接受輸入時(shí)不要用那種可以一次性存入一串字符的函數(shù)(如scanf("%s", s)),因?yàn)槟悴恢罆?huì)有多少個(gè)字符被輸入,用戶輸入的字符串可能會(huì)超過(guò)數(shù)組的大小,這會(huì)導(dǎo)致“溢出”,這是很典型的錯(cuò)誤和安全隱患。
應(yīng)該一個(gè)字符一個(gè)字符地接受輸入,比如用for循環(huán)getchar(),同時(shí)要記下已經(jīng)輸入的字符個(gè)數(shù),如果超范圍了就停止接受輸入(并提示用戶輸入超長(zhǎng)...之類(lèi)的)。 最后別忘了在字符串尾加上'\0'('\0'是字符串結(jié)束的標(biāo)志)
輸入完畢后,你可以用?strlen 之類(lèi)的函數(shù)算出有多少個(gè)字符。或者你也可以自己算:從數(shù)組開(kāi)頭開(kāi)始數(shù),直到遇到'\0'。
關(guān)于 sizeof:
注意!它不是函數(shù),它是個(gè)操作符。它會(huì)返回操作數(shù)占用內(nèi)存的大?。ㄒ詁yte為單位,類(lèi)型是size_t)
sizeof有兩種用法:
sizeof 變量名 :得到的是這個(gè)變量占用內(nèi)存的大小
sizeof (類(lèi)型名) :得到的是這個(gè)類(lèi)型占用內(nèi)存的大小
sizeof后接的如果是個(gè)數(shù)組名,就會(huì)返回整個(gè)數(shù)組占用的內(nèi)存大小。
比如在你的代碼中,sizeof s 就返回1,因?yàn)槟愕膕只有一個(gè)char元素,一個(gè)char元素占一字節(jié)。
如果?char s[256],那么?sizeof s 就返回 256 * char占用字節(jié)數(shù) = 256。 ?所以你不能用 sizeof s 來(lái)求得 s 中有多少個(gè)字符,s中也許只存了5個(gè)字符,但 sizeof 得到的是整個(gè) s 數(shù)組的大小。你只能用 strlen 之類(lèi)的方法來(lái)得到實(shí)際字符數(shù)。
P.S. 準(zhǔn)確地說(shuō),sizeof的第一個(gè)用法中,sizeof后接的不僅是變量名,而是后接一個(gè)表達(dá)式(變量名也算表達(dá)式的一種)。

TA貢獻(xiàn)392條經(jīng)驗(yàn) 獲得超170個(gè)贊
想得到3你可以這樣
直接定義數(shù)組的時(shí)候?char s[]={'a','b','c'};或是char s=“a,b,c”
接著學(xué),會(huì)有動(dòng)態(tài)數(shù)組的教程,比較少用
還會(huì)有string 類(lèi)型,一般的字符數(shù)組都用string類(lèi)型,后面char很少用了

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
數(shù)組的大小在定義時(shí)就確定了。?
你在定義數(shù)組s時(shí)沒(méi)有指定大小,那么編譯器會(huì)根據(jù)你提供的初始化列表的元素個(gè)數(shù)來(lái)決定數(shù)組的大小。?
而你用的是{0}(只有一個(gè)元素0),所以s數(shù)組只含有這一個(gè)元素0,sizeof s就是一個(gè)char的大小1。
因?yàn)閿?shù)組的大小是固定的,你向 s[1] s[2] 中賦值也不會(huì)使數(shù)組擴(kuò)大,并且這樣訪問(wèn)是越界的,這種代碼很不安全。
你想得到結(jié)果為3,那就在定義數(shù)組時(shí)指明其大小為3就好了:char s[3]
- 3 回答
- 1 關(guān)注
- 1896 瀏覽
添加回答
舉報(bào)