C語言中文網 目錄
首頁 > 編程筆記 > C語言筆記 > 字符串 閱讀:11,500

字符數組和字符串的區別,C語言字符數組和字符串區別詳解

C 語言中并不存在字符串這個數據類型,而是使用字符數組來保存字符串。那么,字符數組就一定是字符串嗎?

對于這個問題,大多教科書中的回答是“是”。其實不然,字符數組和字符串是完全不相同的兩個概念,千萬不要混淆。分析如下所示的示例代碼。
#include <stdio.h>
#include <string.h>
int main(void)
{
    /*字符數組賦初值*/
    char cArr[] = {'I','L','O','V','E','C'};
    /*字符串賦初值*/
    char sArr[] = "ILOVEC";
    /*用sizeof()求長度*/
    printf("cArr的長度=%d\n", sizeof(cArr));
    printf("sArr的長度=%d\n", sizeof(sArr));
    /*用strlen()求長度*/
    printf("cArr的長度=%d\n", strlen(cArr));
    printf("sArr的長度=%d\n", strlen(sArr));
    /*用printf的%s打印內容*/
    printf("cArr的內容=%s\n", cArr);
    printf("sArr的內容=%s\n", sArr);
    return 0;
}
運行結果為:
cArr的長度=6
sArr的長度=7
cArr的長度=7
sArr的長度=6
cArr的內容=ILOVEC'
sArr的內容=ILOVEC

從代碼及其運行結果中可以看出如下幾點。

首先,從概念上講,cArr 是一個字符數組,而 sArr 是一個字符串。因此,對于 sArr,編譯時會自動在末尾增加一個 null 字符(也就是'\0',用十六進制表示為 0x00);而對于 cArr,則不會自動增加任何東西。

記住,這里的 sArr 必須是“char sArr[7]="ILOVEC"”,而不能夠是“char sArr[6]="ILOVEC"”。

其次,“sizeof()”運算符求的是字符數組的長度,而不是字符串長度。因此,對于“sizeof(cArr)”,其運行結果為 6;而對于 sizeof(sArr),其運行結果為 7(之所以為 7,是因為 sArr 是一個字符串,編譯時會自動在末尾增加一個 null 字符)。因此,對于以下代碼:
/*字符數組賦初值*/
char cArr[] = {'I','L','O','V','E','C'};
/*字符串賦初值*/
char sArr[] = "ILOVEC";
也可以寫成如下等價形式:
/*字符數組賦初值*/
char cArr[6] = {'I','L','O','V','E','C'};
/*字符串賦初值*/
char sArr[7] = "ILOVEC";
最后,對于字符串 sArr,可以直接使用 printf 的 %s 打印其內容;而對字符數組,很顯然使用 printf 的 %s 打印其內容是不合適的。

通過對以上代碼的分析,現在我們可以很簡單地得出字符數組和字符串二者之間的區別:
  • 對于字符數組,其長度是固定的,其中任何一個數組元素都可以為 null 字符。因此,字符數組不一定是字符串。
  • 對于字符串,它必須以 null 結尾,其后的字符不屬于該字符串。字符串一定是字符數組,它是最后一個字符為 null 字符的字符數組。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo