
sizeof和strlen哪個(gè)包含 0?sizeof的使用

這篇文章給大家聊聊關(guān)于sizeof和strlen哪個(gè)包含 0,以及sizeof的使用對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站哦。sizeof和strlen的區(qū)...
這篇文章給大家聊聊關(guān)于sizeof和strlen哪個(gè)包含 0,以及sizeof的使用對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站哦。
sizeof和strlen的區(qū)別
區(qū)別就是兩者意思是不一樣具體的不同如下
sizeof中文意思是sizeof是C語(yǔ)言中保留關(guān)鍵字,也可以認(rèn)為是一種運(yùn)算符,單目運(yùn)算符。常見(jiàn)的使用方式:inta=10;intarr[]={1,2,3};charstr[]="hello";
strlen中文意思是strlen函數(shù):當(dāng)計(jì)算長(zhǎng)度時(shí),只有遇到'\0'才會(huì)停止計(jì)算,同時(shí)計(jì)算的長(zhǎng)度不包含'\0'。場(chǎng)景一,arr字符數(shù)組中存儲(chǔ)的是一個(gè)字符串
c語(yǔ)言的size of,strlen什么意思
sizeof函數(shù)是計(jì)算數(shù)據(jù)空間的字節(jié)數(shù);
strlen函數(shù)是計(jì)算字符數(shù)組的字符數(shù),以"\0"為結(jié)束判斷,不包含結(jié)束字符'\0'。
舉例說(shuō)明如下:
inta;
charb[]="abcd";
printf("%d",sizeof(a));//輸出變量a所占的內(nèi)存字節(jié)數(shù),輸出4
printf("%d",sizeof(b));//輸出字符數(shù)組b所占的內(nèi)存字節(jié)數(shù),輸出5(5=4+1,1為結(jié)束字符所占的內(nèi)存)
printf("%d",strlen(b));//輸出字符數(shù)組b中字符的個(gè)數(shù),輸出4(不含結(jié)束字符''\0)
在C/C++中,什么時(shí)候會(huì)用到sizeof
sizeof程序員筆試中常考題目,看似簡(jiǎn)單的指令,其中埋了很多雷,要多注意以防傷及吾身。
sizeof:判斷數(shù)據(jù)類型長(zhǎng)度符的關(guān)鍵詞。
數(shù)組charp[10]=“abcde”;
printf(“%d”,sizeof(p));
10
因?yàn)閜是一個(gè)數(shù)組,含有10個(gè)char類型數(shù)據(jù),所以返回10。
指針char*p1=newchar[10];
strcpy_s(p1,10,“abcde”);
printf(“%d”,sizeof(p1));
4
指針存放的是地址,由于32位機(jī)器的地址只要4個(gè)字節(jié)就可以表示了,所以指針的大小都是4。
字符串chara1[]=“abcde”;
chara2[]={'a','b','c','d','e'};
a1的sizeof返回6
a2的sizeof返回5
因?yàn)閍1是字符串常量,會(huì)以“\0”結(jié)尾。
static變量classA
{
public:
staticinta;
Intb;
}
sizeof(A)為4,因?yàn)閟tfatic屬于存在靜態(tài)存儲(chǔ)區(qū),只會(huì)統(tǒng)計(jì)b的大小。
函數(shù)classA0
{
public:
voidadd(){};
}
sizeof返回1,空類的大小都為1。
classA0
{
public:
inti;
Voidadd(){};
}
返回4,int的數(shù)據(jù)長(zhǎng)度。
虛函數(shù)classA1
{
public:
virtualvoidadd(){};
}
返回4,虛函數(shù)的指針為4。
字節(jié)對(duì)齊需要滿足三條準(zhǔn)則:
1、結(jié)構(gòu)體變量的首地址能夠被其最寬的基本類型成員的大小所整除;
2.結(jié)構(gòu)體每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量都是成員大小的整數(shù)倍,如有需要編譯器會(huì)在成員之間加上填充字節(jié);
3.結(jié)構(gòu)體的總大小為結(jié)構(gòu)體的最寬基本類型成員大小的整數(shù)倍,如有需要編譯器會(huì)在最末一個(gè)成員之后加入填充字節(jié)。
structEx1
{
shorts1;
inti1;
charc1;
}
sizeof為12,2+2+4+1+3=12。
第二個(gè)2和最后一個(gè)3分別基于上述2、3準(zhǔn)則添加。
structex2
{
charc1;
Shorts1;
Inti1;
}
sizeof值為8;1+1+2+4=8
在C語(yǔ)言中Strlen是什么意思
Sizeof與Strlen的區(qū)別
1.sizeof操作符的結(jié)果類型是size_t,它在頭文件中typedef為unsignedint類型。
該類型保證能容納實(shí)現(xiàn)所建立的最大對(duì)象的字節(jié)大小。
2.sizeof是算符,strlen是函數(shù)。
3.sizeof可以用類型做參數(shù),strlen只能用char*做參數(shù),且必須是以''\0''結(jié)尾的。
sizeof還可以用函數(shù)做參數(shù),比如:
shortf();
printf("%d\n",sizeof(f()));
輸出的結(jié)果是sizeof(short),即2。
4.數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了。
5.大部分編譯程序在編譯的時(shí)候就把sizeof計(jì)算過(guò)了是類型或是變量的長(zhǎng)度這就是sizeof(x)可以用來(lái)定義數(shù)組維數(shù)的原因
charstr[20]="0123456789";
inta=strlen(str);//a=10;
intb=sizeof(str);//而b=20;
6.strlen的結(jié)果要在運(yùn)行的時(shí)候才能計(jì)算出來(lái),時(shí)用來(lái)計(jì)算字符串的長(zhǎng)度,不是類型占內(nèi)存的大小。
7.sizeof后如果是類型必須加括弧,如果是變量名可以不加括弧。這是因?yàn)閟izeof是個(gè)操作符不是個(gè)函數(shù)。
8.當(dāng)適用了于一個(gè)結(jié)構(gòu)類型時(shí)或變量,sizeof返回實(shí)際的大小,
當(dāng)適用一靜態(tài)地空間數(shù)組,sizeof歸還全部數(shù)組的尺寸。
sizeof操作符不能返回動(dòng)態(tài)地被分派了的數(shù)組或外部的數(shù)組的尺寸
9.數(shù)組作為參數(shù)傳給函數(shù)時(shí)傳的是指針而不是數(shù)組,傳遞的是數(shù)組的首地址,
如:
fun(char[8])
fun(char[])
都等價(jià)于fun(char*)
在C++里參數(shù)傳遞數(shù)組永遠(yuǎn)都是傳遞指向數(shù)組首元素的指針,編譯器不知道數(shù)組的大小
如果想在函數(shù)內(nèi)知道數(shù)組的大小,需要這樣做:
進(jìn)入函數(shù)后用memcpy拷貝出來(lái),長(zhǎng)度由另一個(gè)形參傳進(jìn)去
fun(unsigedchar*p1,intlen)
{
unsignedchar*buf=newunsignedchar[len+1]
memcpy(buf,p1,len);
}
我們能常在用到sizeof和strlen的時(shí)候,通常是計(jì)算字符串?dāng)?shù)組的長(zhǎng)度
看了上面的詳細(xì)解釋,發(fā)現(xiàn)兩者的使用還是有區(qū)別的,從這個(gè)例子可以看得很清楚:
charstr[20]="0123456789";
inta=strlen(str);//a=10;>>>>strlen計(jì)算字符串的長(zhǎng)度,以結(jié)束符0x00為字符串結(jié)束。
intb=sizeof(str);//而b=20;>>>>sizeof計(jì)算的則是分配的數(shù)組str[20]所占的內(nèi)存空間的大小,不受里面存儲(chǔ)的內(nèi)容改變。
上面是對(duì)靜態(tài)數(shù)組處理的結(jié)果,如果是對(duì)指針,結(jié)果就不一樣了
char*ss="0123456789";
sizeof(ss)結(jié)果4===》ss是指向字符串常量的字符指針,sizeof獲得的是一個(gè)指針的之所占的空間,應(yīng)該是
長(zhǎng)整型的,所以是4
sizeof(*ss)結(jié)果1===》*ss是第一個(gè)字符其實(shí)就是獲得了字符串的第一位'0'所占的內(nèi)存空間,是char類
型的,占了1位
strlen(ss)=10>>>>如果要獲得這個(gè)字符串的長(zhǎng)度,則一定要使用strlen
字符串的長(zhǎng)度包含結(jié)尾符嗎
strlen函數(shù)是不包括‘\0’的長(zhǎng)度的,sizeof計(jì)算的結(jié)果才包括'\0'的長(zhǎng)度:charstr[]="Thisisateststringtwo";cout
strlen里面是否包括回車
您好,很高興回答您的問(wèn)題! 回答: 1,strlen包括換行符,不包括結(jié)束符“\0”,strlen(str)的大小為7,分別為:a,b,\n,\0123,\,\,\*共7個(gè)字符; 2,如果您用sizeof的話會(huì)比strlen()多1個(gè)(加上最后的'\0'),也就是8.
sizeof和strlen哪個(gè)包含 0和sizeof的使用的問(wèn)題分享結(jié)束啦,以上的文章解決了您的問(wèn)題嗎?歡迎您下次再來(lái)哦!
本文鏈接:http://www.wzyaohuidianqi.cn/ke/2697.html
