字串陣列初始化

2021-05-01 03:28:33 字數 1764 閱讀 9935

(1)char arr[10]="hi";

初始化字串陣列時,編譯器自動將字串最後乙個字元後面加上'/0',以表示字串的結束。

如果陣列的大小大於字串的長度+1,那麼把字串結束後面的元素也都初始化為'/0';

看這段程式:

定義乙個大小為12的字串陣列

char str1[12]="jiajia";        

讓乙個char型的指標指向這個陣列

char *p1=str1;

輸出這個字串

printf("%s/n/n",str1);

利用指標輸出這個字串陣列中每個元素的字元、字元ascii值、字元儲存位址

for(int i=0;i<12;i++)

可以看出,陣列元素的後幾位都被初始化成了'/0';使用printf列印字串陣列時,程式遇到第乙個'/0'就結束對字串的讀取。

如果陣列的大小小於字串的長度+1,程式在執行時可能要出現問題,所以應當確保陣列的大小要大於字串長度的大小+1;

這段程式的字串長度+1小於陣列的大小:

char str2[12]="hello jiajia";

char *p2=str2;

printf("/n/n/n%s/n/n",str2);

for(int i=0;i<28;i++)

使用printf列印字串,程式需要找到'/0'才能結束讀取,結果找遍整個陣列沒有找到,只有繼續順著位址尋找,一直找到某個位址上的assii是0的,字串才讀取完畢。所以本段程式在讀取完"hello jiajia"之後,後面可能還會有幾個隨機的字元,就是因為字串終止於'/0'。

(2)char arr="hello world!";

這種初始化方法不用擔心陣列大小過小的情況,陣列的大小由編譯器決定。

(3)char arr=;

同第二種方法結果相同,但顯然要麻煩許多。另外,' '代表空格,ascii值是32,'/0'代表字串結束,ascii值是0;

(4)char *p="hello world";

使用陣列的方式初始化。同陣列不同之處在於,p是乙個變數,可以做遞增、遞減運算,而arr是陣列的首位址,是乙個位址常量,不能做遞增、遞減運算。

char *name="liujiajia";

name[0]='l';

printf("/n%s/n",name);

name[0]='l';這句**在最新的c99標準中會引發程式異常。需要注意。

char *string="c programe";

char *string2;    

string2=string;    //將指標string的值賦給string2

printf("/nstring=%s,&string=%p,string=%p/n",string,&string,string);

printf("/nstring=%s,&string=%p,string=%p/n",string2,&string2,string2);

上面這段程式最後顯示,指標string所指向的位址和指標string2所指向的位址相同,這就說明它們指向的是記憶體裡面同乙個字串,也就是說字串本身並沒有複製,而是產生了乙個指向同乙個字串的指標。這樣程式的效率會更加的高。如果需要複製字串可以使用 strcpy() 或 strncpy()。

原文:http://www.cnblogs.com/inspurhaitian/archive/2008/09/05/1285207.html

字串初始化

在c語言程式設計中,當我們宣告乙個字串陣列的時候,常常需要把它初始化為空串。總結起來有以下三種方式 1 char str 10 2 char str 10 3 char str 10 str 0 0 第 1 2 種方式是將str陣列的所有元素都初始化為 0 而第 3 種方式是只將str陣列的第乙個元...

字串初始化

在 裡,經常會用字串進行初始化操作。比如 void func void 對於上面2條初始化語句,它們的區別是什麼呢?1,首先,hello world 是乙個字串常量,存放在靜態常量區。2,str1是乙個字元陣列,分配在棧上,儲存空間由 hello world 的長度 含 0 決定,存放的內容由 he...

字串初始化

字串初始化使用字串初始化操作符即百分號 標記轉化說明符的開始。在 左邊為格式化字串,右邊為被格式化的值。format hello,s.s enough?values world cold print format values hello,world.cold enough?格式化字串的 s部分為轉...