C語言中整形數組、字符數組、字符串的區別


一、

第一 整型數組的存放,數組最后是不加'\0'的,字符串會自動加上,因此存放字符的時候數組的大小要比實際字符的多一個
第二 整型數組 每一個單元是4個字節的,字符串是一個一個字符存放的,每個字符占一個

二,字符數組與字符串的區別

C語言中沒有專門的字符串變量,如果要將一個字符串存放在變量中,必須使用字符數組,即用一個字符型數組來存放一個字符串,數組中每一個元素存放一個字符。

<1> 定義: char c[10]

字符型與整型互相通用,因此 int c[10] 也可以定義字符數組。但由於兩種類型分配字節不同, 用整型來定義會浪費空間, 另外這樣定義實際意義也不大, 只是為了說明其合法性。

<2> 初始化: 

    最簡單的方法即逐個賦值: char c[10]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 10個字符分別賦紿c[0]到c[9]10個元素。

   如果初值個數小於數組長度,則只將這些字符賦紿數組中前面的元素,其余元素自動定為空字符(即'\0')。
    如char c[12]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 則c[10]、c[11]值都為'\0' 。

    C語言中,將字符串作為字符數組來處理。一般我們用字符數組來存放字符串時,都要先確定一個足夠大的數組,而實際並用不了那么多,而我們只關心其有效位,為測定字符串實際長度,C規定了一個"字符串結束標志",以字符 '\0' 代表。如果有一個字符串,其中第10個字符為'\0',則此字符串的有效字符為9個。也就是說,在遇到字符'\0'時,表示字符串結束,由它前面的字符組成字符串。
    系統對字符串常量也自動加一個'\0'作為結束符。

    對於語句: pirntf("How do you do? \n"); 實際上該字符串在內存中存放時,系統自動在最后一個字符'\0'的后面加了一個'\0'作為字符串結束標志,在執行printf函數時,每輸出一個字符檢查一次,看下一個字符是否'\0'。遇'\0'就停止輸出。

   可以用字符串常量來初始化字符數組。如:

    char c[]={"I am happy"};

    也可直接寫成:

   char c[]="I am happy"; 注意此時數組的長度不是10,而是11,因為系統自動加上了'\0'結束符。

    字符數組不要求最后一個字符為'\0',而為了使處理字符數組和字符串的方法一致,便於測定字符串的實際長度,能及方便在程序中處理, 在字符數組末尾也常加上一個'\0'。

<3> 字符數組的輸入輸出 

    (1) 逐個字符輸入輸出。用格式符"%c"輸入或輸出一個字符。

    (2) 將整個字符串一次輸入或輸出。用"%S"格式符,意思是輸出字符串(String)。例如:

  char c[]={"china"};
  printf("%S", c);

如果一個字符數組中包含一個以上'\0',則遇第一個'\0'時輸出就結束。

    (3) 若輸入字符串長度超過字符數組所定義的長度時,將造成數組下標越界,但系統對此並不報錯。

    (4) 用%S格式輸入字符時,遇空格、Tab鍵和回車將自動結束輸入。

用scanf函數輸入時, 遇到空格則認為一個字符串結束。試驗如下:

#include <stdio.h>
int main()
{
    char str1[5], str2[5], str3[5];
    scanf("%s %s %s", str1, str2, str3);
    printf("%s %s %s\n", str1, str2, str3);
    return 0;
}

運行結果:
================================
how are you↙
how are you
================================

#include <stdio.h>
int main()
{
    char str[13];
    scanf("%s", str);
    printf("%s\n", str);
    return 0;
}

運行結果:
================================
how are you?↙
how
================================

由第二個程序可知,實際並未將這12個字符加上'\0'送到數組str中,而是將空格前的字符"how"送到str中,將其視為字符串處理,在其后加上'\0' 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM