1. 程式人生 > >數組不是字符串

數組不是字符串

開始 語法 %d 2.0 字節 logs style c語言 亂碼

在C語言中我們知道沒有字符串這種數據類型,所以為了表示字符串,我們一般會使用char類型的數組來表示,這就導致剛開始的時候我們會以為數組和字符串時一樣的,其實並不然,數組是數組,字符串是字符串;

  數組是什麽,數組是固定內存塊大小的別名,它是一個可自定義內存大小的數據類型;

  我們知道strlen可以算出字符串中數據的個數,sizeof可以算出變量所占據的內存大小;

  

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 void main()
 6
{ 7 char a[] = {a,b,c,d,e};//一維數組,並不是以‘\0‘為結尾的字符串, 8 char a_1[] = "abcde";//字符串,分配了六個字節空間 9 10 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 14 15 system("pause"); 16 }

  從這幾行代碼中我們可以發現,同樣是往一個一維數組中導入abcde,char a[] = {‘a‘,‘b‘,‘c‘,‘d‘,‘e‘}是數組,char a_1[] = "abcde",那麽數組和字符串的區別在哪?

  我們可以看到:數組存入數據的個數大於分配的空間數,strlen這個函數,統計字符數據個數時遇到NULL或者‘\0‘才會停下來,所以也就是說,內存中的亂碼也會被認為是存入的數據;

  但是字符串會在後面隱式的寫入一個‘\0‘,也就是,字符串終止符,所以它的長度是6,存入的數據長度是5,;

  於是這時候就有人會想這樣寫char a[] = {‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘\0‘};加一個0不就好了,這樣一看的話確實是樣的,但是我們前面說過,C語法中沒有字符串這一說法,為了表示它我們通常使用數組來表示,

  那麽問題就來了,請問2.0000 = 2這個說法能說明2.0000和2是一樣的麽?當然不行,雖然他們的數值相等。但是一個是小數,一個是整數,類型都是不一樣的雖然相等卻不能說明他們是同一種數據類型;

數組不是字符串