2 回答

TA貢獻1877條經(jīng)驗 獲得超6個贊
字面字符串里頭 \開始的是一個轉(zhuǎn)義字符。
這里\0代表的是一個空字符。
sizeof()當(dāng)括號里頭是數(shù)組名的時候 它計算的是整個數(shù)組的長度。所以是7。
strlen()是計算字符串的長度。c里頭字符串是以空字符結(jié)尾作為字符串結(jié)束的標(biāo)志
所以strlen()在遇到空字符的時候就已經(jīng)認(rèn)為字符串結(jié)束了。所以這里它只認(rèn)為字符串的長度為2.是a和0??兆址挥嬎阍趦?nèi)。
int main()
{
char a[7]="a0\0a0\0";
int i,j;
i=sizeof(a);
j=strlen(a);
printf("%d %d\n",i,j);
printf("%s",a);
system("pause");
return 0;
}
printf()輸出字符數(shù)組
整個輸出是
7 2
a0
可以看到空字符是字符串結(jié)尾的標(biāo)志是很重要 因為很多函數(shù)是基于此來運用的。

TA貢獻1777條經(jīng)驗 獲得超10個贊
char arr[]="ABCDE"; //聲明一個字符數(shù)組
char *ptr; //聲明一個字符指針;
for(ptr=arr;ptr<arr+5;ptr++)
printf("%s\n",ptr);
第一次循環(huán),ptr指向數(shù)組首地址;從A開始打印;
第二次,ptr++指向數(shù)組首地址+1;從B開始打印;
...
依次推就能得出答案;
你一定會繼續(xù)問:那為什么不輸出ABCDE?
原因在于,printf函數(shù)輸出數(shù)組型字符串時,從數(shù)組名標(biāo)記的地址開始讀取內(nèi)容,直到內(nèi)存中出現(xiàn)標(biāo)記為‘\0’的內(nèi)存單元才停止.
char arr[]="A\0B\0C\0D\0E\0";
char *ptr;
ptr = arr;
for(ptr=arr;ptr<arr+10;ptr++)
printf("%s",ptr);
將會得出ABCDE的打印
- 2 回答
- 0 關(guān)注
- 215 瀏覽
添加回答
舉報