字串與字元陣列
阿新 • • 發佈:2018-11-10
一 . 使用帶%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";
強調:字串用雙引號”“,字元常量用單引號’ ’ 。