關於字元陣列和字串***
引用:
火未燃說:謂char a[5]=;和char a[10]=;
有效字元5個,'/0'表示結束,china共5個字元,但在記憶體佔6個位元組,a[10] 佔足五個後遇到'/0'結束
結束符 系統會自帶的,不用畫蛇添腳^_^加上也無所
by eviloctal
首先說火未燃關於空字元系統自己加的說法是錯誤的 只有字串才自己加 但是字串和字元陣列並非同乙個問題!
我詳細給你說說吧:
引用:
問題1: 我們定義乙個字串陣列char a[5]=;和char a[10]=;
問這兩個陣列在記憶體中分別佔幾位?
首先回答您的問題 a[5]肯定是佔5個位元組 a[10]肯定是占用10個位元組
因為在c語言中 陣列在宣告的時候 系統會順序給您分配n個sizeof(identifier)個空間 所謂順序就是連續分配的 他們的記憶體位址是連續的
其實火未燃說的不對!
字元陣列和字串是兩個完全不同的概念 一定要搞清楚 不然程式要出錯的!
首先:字元陣列是有單個字元儲存構成的陣列 字元以ascii形式儲存在陣列的成員變數中 但是系統不會給字元陣列末尾自動加空字元 並且不能通過陣列名作為指標常量呼叫
其次:字串是以空字元結尾的一系列字元 可以使用陣列儲存 系統自動加空字元 但是一定要留下乙個空字元的位置 可以直接通過陣列名呼叫
現在說說火未燃的回答錯在什麼地方 他混淆了字元陣列和字串的概念 概念我們前面說了 很抽象 現在看看宣告和初始化
宣告並初始化字元陣列
char a[5]=;
//看到了麼 沒有空字元的位置 因為我的陣列中放字元就5個元素 系統不會主動加/0的火未燃說的不對 要想呼叫也得a[0]來使用c 這種特性和數值陣列一樣
宣告並初始化字串
char a[6]= "china";
//注意 是a[6]和雙引號 因為這是一串字元 所以 最後要留空字元 否則如果你用a[5] 那麼系統宣告的空間裡將沒有給/0分配的那乙個位元組 你呼叫字串的時候 系統將直到讀到下乙個空字元為止 有可能下乙個空字元在系統記憶體的某個地方
最後副送乙個知識點 當你用strlen求取字串a[6]的長度的時候 將得到int 5的返回值 因為strlen函式不算空字元 系統自己加
引用:
問題2: 陣列以'/0'為結束符,如果我們自己給陣列的最後賦於乙個'/0'字元,問:系統還會預設再給該陣列加上一 個'/0'結束符嗎?
這個問題你無須關心 取決於你是否多分配了乙個給他的空間 空字元無法顯示 不可見 用於標誌字串的末尾 使用
char a[6] = "china"; //陣列儲存字串
char *p = "china"; //指標儲存 注意在在使用前為指標初始化(你現在無須掌握)
puts(a);
puts(p);
列印的都將是china換行
但是如果是這樣
char a[5] = "china";
puts(a);
那麼將產生無可預料的錯誤 因為你不知道下乙個空字元在** 而用指標則沒那個問題
系統讀到第乙個空字元就直接把前面的內容列印
你在數值陣列 字元陣列 和 字串的這幾個章節的知識沒有紮實 重新好好回去讀 這個問題不是問題
多看幾遍書 就可以了
忽然想吃草的想法:
引用:
問題1:系統預設給字串賦於乙個'/0'字元,所以a[5]應該佔6位a[10]由於不足位補上'/0'所以應該佔11位
但是看了書,給我的感覺應該是a[5]佔6位 而a[10]佔10位
陣列分配多少位就是多少位 所有的字元都是乙個位元組 那麼你分配的char a[n]; n是多少就是多少位元組
但是int就不一定了 現在你也無需要知道 好好繼續看書
引用:
問題2:個人認為應該會給予預設加上乙個'/0'
只有字串才會分配 千萬不要象火未燃兄弟那樣以為字元陣列和字串是完全乙個型別的儲存方式 那樣以後有很大的麻煩
學習知識要紮實 不然以後你要煮假生公尺的!
關於字元陣列和字串陣列
首先看2個東東 char str2 這2個哥們兒長的很像,可實際的涵義確差老了。2個都是c裡面的東東。str1叫字元陣列,首先它是乙個陣列,5個元素但長度為4 加上個 0 其實就相當於 abcd 看看怎麼變過來的 首先變為char str1 abcd 然後把括號去掉就是 char str1 abcd...
字串和字串陣列
字串陣列 include int main int argc,const char ar printf name1 s n name1 name1 zhangsan 部分初始化中,沒有被初始化的元素預設是0,0 對應的ascii值是 0 char name2 9 printf name2 s n n...
關於字元陣列 和 字串比較 C
char acstr aaaaa 這個是字元陣列,只含有5個字元 char pcstr aaaaa 這個是字串,含有6個字元,即5個a加乙個結束符 0 輸出的結果 strlen 長度都是5,所以即便是字串,最後取長度的時候,也不考慮 0 strlen 計算字串長度,忽略結束符 0 char p he...