陣列不是字串

2022-08-30 23:57:30 字數 1281 閱讀 6860

在c語言中我們知道沒有字串這種資料型別,所以為了表示字串,我們一般會使用char型別的陣列來表示,這就導致剛開始的時候我們會以為陣列和字串時一樣的,其實並不然,陣列是陣列,字串是字串;

陣列是什麼,陣列是固定記憶體塊大小的別名,它是乙個可自定義記憶體大小的資料型別;

我們知道strlen可以算出字串中資料的個數,sizeof可以算出變數所佔據的記憶體大小;

1 #include 2 #include 

3 #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...