1. 程式人生 > >字串與字元陣列

字串與字元陣列

一 . 使用帶%s格式符的scanf函式讀入字串時,不需要再引數前加取地址符&。
原因:編譯器會自動將陣列名作為陣列首地址來處理。
如:scanf("%s", str);
二 . 字元陣列與字串
(這兩個概念其實現在我也不是很清楚),但看到的一句話可以幫助理解:在C語言中,將字串當作字元陣列處理。

字元陣列的初始化:

              char str[3] = {'a', 'b', 'c'};
              char str[3] = {'a', 'b'};       ——剩餘的元素值自動設為空字元'\0'。
              怎樣證明剩餘的元素值自動設為了空字元呢?
我們可以輸出它的ASCⅡ值: #include <stdio.h> int main() { int str[3] = {'a', 'b'}; printf("%d", str[2]); //因為陣列是從str[0]開始記的 printf("\n"); return 0; } 由於剛開始在上面的那段程式碼中我輸出用的,但執行時仍是0,這是不是說明了一個問題呢:
當C編譯器在程式中遇到長度為n的字串常量時,他會為這個字串常量分配長度為n+1的字元陣列空間,最後一個空間用於儲存空字元'\0',用來標誌字串的結束。 但問題是,這並不是字串啊,這是使用逐個字元列舉的方式對字元陣列進行初始化的!!!! ![這是我分別改為輸出str[3],str[4],str[5]的結果,每次改後執行了兩次](https://img-blog.csdn.net/20171114163211919?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDExMzgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![但如果我定義為char型別後,分別輸出str[2
]和str[3]又是這種情況](https://img-blog.csdn.net/20171114163603216?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdDExMzgz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 不清楚為什麼會這樣,現在還找不到答案!!

字串(用字串常量初始化字元陣列):

              char str[] = {"hello"};
              char str[] = "hello";

強調:字串用雙引號”“,字元常量用單引號’ ’ 。