字符數組和字符串

一、字符數組和字符串的再認識

此處關於字符串是否是字符數組的問題,此處我們需要明確:

  1. 字符數組,完整地說叫字符類型的數組。字符數組不一定是字符串。
  2. 字符串是最後一個字符爲NULL字符的字符數組。字符串一定是字符數組。
  3. 字符數組的長度是固定的,其中的任何一個字符都可以爲NULL字符。
  4. 字符串只能以NULL結尾,其後的字符便不屬於該字符串。
  5. strlen()等字符串函數對字符串完全適用,對不是字符串的字符數組不適用。

二、字符串數組

字符串數組是二維字符數組,同理,二維字符數組不一定是字符串數組 
接下來以一段代碼進行說明:

#include <stdio.h>
int main(void)
{
    int  i;
    //這是字符數組賦初值的方法,維數:4X2
    char cArr[][2] = {{'Q','U'},
                     {'A','N'},
                     {'X','U'},
                     {'E','\0'}};
    //這是字符串數組賦初值的方法,維數:4X3
    char sArr[][3] = {"qu","an","xu","e"};

    //用sizeof()求長度
    for (i=0; i<4; i++) {
        printf("%d: %d  %d\n", i, sizeof(cArr[i]), sizeof(sArr[i]));
        printf("[%s] [%s]\n", cArr[i], sArr[i]);
    }
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

從上面可以看出,cArr[i]的長度爲2,sArr[i]的長度爲3,因爲多了一個NULL字符。

三、字符串與字符數組的相互轉化

字符數組中插入一個NULL字符,就形成了字符串,一般NULL字符在有效字符的最後。

#include <stdio.h>
#include <string.h>

int main(void)
{
    //因爲最後有NULL,所以這就變成了字符串
    char cArr[] = {'Q', 'U', 'A', 'N', 'X', 'U', 'E', '\0'};
    //因爲少定義了一位,最後無NULL,所以這就變成了字符數組
    char sArr[7] = "quanxue";
    //最後一個元素未賦值
    char tArr[16] = "www.quanxue.cn";

    //用sizeof()求長度
    printf("cArr: %2d ,%2d\n", strlen(cArr), sizeof(cArr));
    printf("sArr: %2d ,%2d\n", strlen(sArr), sizeof(sArr));
    printf("tArr: %2d ,%2d\n", strlen(tArr), sizeof(tArr));

    //將tArr的最後一個元素賦值,字符串就成了字符數組
    tArr[15] = '!';

    //作爲字符數組,將顯示16個字符
    for (i=0; i<16; i++) printf("%c", tArr[i]);  //字符數組的顯示方法
    //作爲字符串,將顯示14個字符。
    printf("\n%s\n", tArr);     //字符串的顯示方法

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

四、數組的輸入和輸出

getchar()和putchar()函數是單個字符的輸入輸出,gets()和puts()是字符串的輸入輸出,也是標準函數,在stdio.h中被定義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章