在c語言中我們知道沒有字串這種資料型別,所以為了表示字串,我們一般會使用char型別的陣列來表示,這就導致剛開始的時候我們會以為陣列和字串時一樣的,其實並不然,陣列是陣列,字串是字串;
陣列是什麼,陣列是固定記憶體塊大小的別名,它是乙個可自定義記憶體大小的資料型別;
我們知道strlen可以算出字串中資料的個數,sizeof可以算出變數所佔據的記憶體大小;
1 #include 2 #include3 #include 4
5void
main()
6;//
一維陣列,並不是以'\0'為結尾的字串,
8char a_1 = "
abcde
";//
字串,分配了六個位元組空間
910 printf("
sizeof(a):%d,strlen(a):%d\n
",sizeof(a),strlen(a));//
5 strlen(a) > sizeof(a)
11 printf("
a_1:%d,strlen(a_1):%d\n
",sizeof(a_1),strlen(a_1));//
6 5
12 printf("
a:%s\n
",a);//
沒有自動結束的能力,會列印出abcde 和 一堆亂碼
13 printf("
a_1:%s\n
",a_1);//
列印出abcde
1415 system("
pause");
16 }
從這幾行**中我們可以發現,同樣是往乙個一維陣列中匯入abcde,char a = 是陣列,char a_1 = "abcde",那麼陣列和字串的區別在哪?
我們可以看到:陣列存入資料的個數大於分配的空間數,strlen這個函式,統計字元資料個數時遇到null或者'\0'才會停下來,所以也就是說,記憶體中的亂碼也會被認為是存入的資料;
但是字串會在後面隱式的寫入乙個'\0',也就是,字串終止符,所以它的長度是6,存入的資料長度是5,;
於是這時候就有人會想這樣寫char a = ;加乙個0不就好了,這樣一看的話確實是樣的,但是我們前面說過,c語法中沒有字串這一說法,為了表示它我們通常使用陣列來表示,
那麼問題就來了,請問2.0000 = 2這個說法能說明2.0000和2是一樣的麼?當然不行,雖然他們的數值相等。但是乙個是小數,乙個是整數,型別都是不一樣的雖然相等卻不能說明他們是同一種資料型別;
字串,字串陣列,字串指標!!
字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...
無冗餘輸入字串 字串陣列 字串陣列
問題 輸入乙個數字n,接下來輸入n個字串,要求無冗餘地儲存字串 分析 參考到無冗餘地字串輸入 使用動態分配。本題還參考了這個鏈結的內容 1 include include int main char p int ns,i scanf d ns p char malloc sizeof char fo...
字串 字串陣列 字元陣列的區別
string a newstring 字串 string a newstring 5 字串陣列 char a newchar 5 字元陣列 string a newstring abc 字串 string a newstring 字串陣列的賦值 string a 字串陣列的初始化 char a ne...