- C語言中沒有字符串這種數(shù)據(jù)類型痹愚,可以通過char的數(shù)組來替代富岳;
- 字符串一定是一個(gè)char的數(shù)組,但char的數(shù)組未必是字符串拯腮;
- 數(shù)字0(和字符‘\0’等價(jià))結(jié)尾的char數(shù)組就是一個(gè)字符串窖式,但如果char數(shù)組沒有以數(shù)字0結(jié)尾,那么就不是一個(gè)字符串动壤,只是普通字符數(shù)組萝喘,所以字符串是一種特殊的char的數(shù)組。
在字符數(shù)組中
#include<stdio.h>
int main()
{
char arr1[10] = { 'c', 'h', 'u', 'n' };
char arr2[4] = { 'c', 'h', 'u', 'n' };
printf("arr1 content:%s \n", arr1);
printf("arr2 content:%s \n", arr2);
printf("arr1 size %d \n", sizeof(arr1));
printf("arr2 size %d \n", sizeof(arr2));
for (int i = 0; i < 10; i++)
{
printf("arr1 content:%c \n", arr1[i]);
}
for (int i = 0; i < 10; i++)
{
printf("arr2 content:%c \n", arr2[i]);
}
return 0;
}
我們發(fā)現(xiàn)在以string格式在打印字符串?dāng)?shù)組的時(shí)候琼懊,
aar1 打印出來的結(jié)果是:chun
arr2 打印出來的結(jié)果是: chun燙燙燙燙chun
這是因?yàn)?%s
會(huì)接收字符串的結(jié)束標(biāo)志\0
之前的所有的字符阁簸,而 \0
值A(chǔ)SCII中就是數(shù)字0,其中arr1中未賦值部分的數(shù)組會(huì)被編譯器 為0
哼丈,而在arr2中因?yàn)橹淮鎯?chǔ)了4個(gè)字符启妹,沒有字符串的結(jié)束標(biāo)志,導(dǎo)致識(shí)別不到字符串結(jié)束醉旦,而出現(xiàn)錯(cuò)誤饶米。
當(dāng)我們?cè)谝詂har進(jìn)行打印的時(shí)候,我們會(huì)發(fā)現(xiàn)车胡,arr1中能夠打印出10個(gè)字符檬输,在后面幾個(gè)未賦值的字符打印出來的均為空,arr2中能過正常打印出4個(gè)字符匈棘。
#include<stdio.h>
int main()
{
char arr1[10] = "chuneryi";
char arr2[9] = "chuneryi";
printf("arr1 content %s \n", arr1);
printf("arr1 size %d \n", sizeof(arr1));
printf("arr2 content %s \n", arr2);
printf("arr2 size %d \n", sizeof(arr2));
return 0;
}
將8個(gè)字符的字符串chuneryi
賦值給一個(gè)空間大小為8 的一個(gè)數(shù)組的時(shí)候我發(fā)現(xiàn)丧慈,提示了一個(gè)錯(cuò)誤顯示字符串占用9個(gè)空間而不是8個(gè),這是因?yàn)樵?code>字符串的實(shí)際存儲(chǔ)中主卫,會(huì)在最后一位存儲(chǔ)一個(gè)結(jié)束標(biāo)志逃默。因此在控制臺(tái)中能夠正常的輸出鹃愤。
友情提示,歡迎批評(píng)指正
在以下博客中 發(fā)現(xiàn)了部分基礎(chǔ)錯(cuò)誤笑旺。
https://blog.csdn.net/weixin_34111790/article/details/92459629
在編譯器中我發(fā)現(xiàn)昼浦,標(biāo)出來的三個(gè)地方均報(bào)錯(cuò)
第一個(gè)箭頭處馍资,數(shù)組的長(zhǎng)度應(yīng)該是3
第二個(gè)箭頭處筒主,不符合字符串的賦值規(guī)則
第三個(gè)箭頭處,結(jié)合我們上面的分析鸟蟹,數(shù)組的長(zhǎng)度為4