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

電子表格字符串至數組轉換和改良LabVIEW資料免費下載

評論