首先字元陣列的定義方式有如下兩種:
char a = "abc";
該操作初始化陣列的大小為4,其中元素分別為'a','b','c','\0'.
若用printf("%s\n",a);
輸出為abc
char a[3] = "abc";
若用printf("%s\n",a);
輸出會產生非預期的結果,在處理的時候編譯器沒有為a的末尾新增'\0'作為結束符
所以一般推薦使用前一種方式進行初始化字元陣列。
字串的初始化:
可以使用字元陣列來替代
方式1:char a = "abc";
或者方式2:char * a = "abc";
區別在與
第一種方式可以使用賦值語句進行更改,例如 *a = 'd';
但是第二種方式中上述更改是不允許的,會在執行時出現段錯誤。
讀操作兩種方式表現一樣。
兩種方式對字元陣列的實現機制不同。方式2,編譯器在記憶體的文字常量區分配一塊記憶體,儲存」abc「字串字面值,然後在棧上分配記憶體儲存a,a的值"abc"的位址。a[0]='c'試圖修改常量」abc「,程式會出錯。而char a="abc"語句,定義了乙個陣列,編譯器為其在棧上分配了記憶體空間,所以進行修改操作是沒有問題的。
C語言中關於字元陣列和指標陣列
做筆試題目的時候,碰到字元陣列初始化的問題,居然一下子懵了。在c語言中儲存字串有兩種方法 字元陣列和字串指標 這兩者的儲存位置不同,首先字元陣列 區域性變數 是儲存在棧中的 指標指向字串時,則包括了兩部分,指標本身,儲存在棧中 區域性指標變數 字串本身儲存在 段 gcc中是這樣 基於上面一點就會產生...
C語言中的字串和字元陣列
1 字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。char str 10 即把10個字元分別賦給str 0 到str 9 10個元素 如果花括號中提供的字元個數大於陣列長度,則按語法錯誤處理 若小於陣列長度,則只將這些字元陣列中前面那些元素,其餘的元素自動定...
C語言中字元陣列庫函式
以下內容摘自 c程式設計教程 美 h.m.deitel p.j.deitel著,薛萬鵬等譯,機械工業出版社。void memccpy void dest,const void src,int c,size t n 從sr 所指向的物件複製 個字元到 est所指向的物件中。如果複製過程中遇到了字元c則...