char *c="abcdef"; char d[]="abcdef"; char e[]={'a','b','c','d','e','f'};
printf("%d%d/n",sizeof(c),strlen(c)); printf("%d%d/n",sizeof(d),strlen(d)); printf("%d%d/n",sizeof(e),strlen(e));
輸出的結(jié)果是: 4 6 7 6 6 14
分析一下: 第一行定義c為一個(gè)字符指針變量,,指向常量字符串,c里面存放的是字符串的首地址,。 第二行定義d為一個(gè)字符數(shù)組,,以字符串的形式給這個(gè)字符數(shù)組賦值。 第三行定義的也是個(gè)字符數(shù)組,,以單個(gè)元素的形式賦值,。
當(dāng)以字符串賦值時(shí),"abcdef",結(jié)尾自動(dòng)加一個(gè)"/0". strlen(c)遇到/0就會(huì)結(jié)束,,求的是字符串的長(zhǎng)度,,為6. sizeof(c)求的是類型空間大小,在前面說過,,指針型所點(diǎn)的空間大小是4個(gè)字節(jié),,系統(tǒng)地址總線長(zhǎng)度為32位時(shí)。
strlen(d)也是一樣,,字符串賦值,,自動(dòng)添加/0,求字符串的長(zhǎng)度當(dāng)然是6. sizeof(d)是求這個(gè)數(shù)組所占空間的大小,,即數(shù)組所占內(nèi)存空間的字節(jié)數(shù),應(yīng)該為7.
sizeof(e), 數(shù)組e以單個(gè)元素賦值,,沒有/0結(jié)束符,,所以所占空間的大小為6個(gè)字節(jié)。 strlen(e),去找/0結(jié)尾的字符串的長(zhǎng)度,,由于找不到/0,,所以返回的值是一個(gè)不確定的值。 |
|