字符數(shù)組和字符串有沒有區(qū)別?
最近有同學(xué)做筆試題的時(shí)候,遇到了這么一個(gè)問答題。
絕大多數(shù)人會(huì)把字符數(shù)組和字符串當(dāng)作一個(gè)概念,因?yàn)樵?a href="http://www.brongaenegriffin.com/soft/data/21-24/" target="_blank">C語言中沒有string這種類型,所以我們一般用字符數(shù)組來表示字符串。
要說他們的區(qū)別,我覺得主要就是 ? 的問題。
定義字符數(shù)組,我們一般這樣寫:
chararray[]={'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};;
但是這種寫法存在很嚴(yán)重的問題,如果用 strlen 計(jì)算數(shù)組的長(zhǎng)度或者用 printf 的 %s 格式來輸出,那程序很容易奔潰。
因?yàn)閿?shù)組里面只有 helloworld, 占10個(gè)字節(jié),它達(dá)不到字符串的標(biāo)準(zhǔn)。
C語言中的字符串必須以 ? 結(jié)尾,不管是 printf 還是 strlen 這些字符串處理函數(shù),都是把 ? 作為字符串的結(jié)束標(biāo)志。
想要計(jì)算這個(gè)數(shù)組的長(zhǎng)度,只能用 sizeof 關(guān)鍵字,得到數(shù)組實(shí)際占用內(nèi)存的大小。
這個(gè)代碼要想修改,有兩種方法。
第一種把數(shù)組的容量改的大一些,程序就能正常運(yùn)行。
char array[20] = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};;
這種寫法,helloworld 的后面全是 ?。
此時(shí)的字符數(shù)組就是一個(gè)完整的字符串。
第二種在最后一個(gè)字符的后面手動(dòng)加上一個(gè) ?,也能達(dá)到相同的效果。
chararray[]={'h','e','l','l','o','w','o','r','l','d','?'};
當(dāng)然這種寫法太麻煩,我們一般直接寫成這樣。
char array[] = "helloworld";
這個(gè)地方的 helloworld 就是一個(gè)標(biāo)準(zhǔn)的字符串,存儲(chǔ)的時(shí)候編譯器會(huì)把最后的 ? 一同加入到數(shù)組中。
這種寫法推薦大家在寫代碼的時(shí)候使用。
有時(shí)候我們還會(huì)聽到一個(gè)概念,字符串?dāng)?shù)組,比如寫成這樣的:
chararray[]={"helloworld","123456"};
這個(gè)就比剛才的代碼麻煩的多。
問大家一個(gè)問題,此時(shí)的數(shù)組array在內(nèi)存中占幾個(gè)字節(jié)?
審核編輯:湯梓紅
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3103瀏覽量
74916 -
C語言
+關(guān)注
關(guān)注
180文章
7628瀏覽量
139945 -
字符串
+關(guān)注
關(guān)注
1文章
589瀏覽量
21026 -
數(shù)組
+關(guān)注
關(guān)注
1文章
419瀏覽量
26324
原文標(biāo)題:字符數(shù)組和字符串是不是一回事
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
數(shù)組、向量和字符串 實(shí)驗(yàn)
C語言字符串轉(zhuǎn)數(shù)字實(shí)現(xiàn)方法
C語言的字符串處理函數(shù)

電子表格字符串至數(shù)組轉(zhuǎn)換和改良LabVIEW資料免費(fèi)下載

用指針實(shí)現(xiàn)字符串拷貝的程序和字符型指針變量與字符數(shù)組的區(qū)別說明

什么是復(fù)制字符串?Python如何復(fù)制字符串
字符串函數(shù)重寫練習(xí)
C語言字符數(shù)組和字符串有什么區(qū)別
簡(jiǎn)述數(shù)組及字符串組的使用

評(píng)論