當(dāng)前位置:首頁(yè) > 科技 > 正文

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

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)哦!

主站蜘蛛池模板: 亚洲国产天堂久久综合| 丁香五月缴情综合网| HEYZO无码综合国产精品| 狠狠色狠狠色综合日日五| 色欲综合久久中文字幕网| 色综合色狠狠天天综合色| 久久91精品综合国产首页| 99久久婷婷免费国产综合精品 | 91精品国产综合久久精品| 久久综合色区| 一本大道加勒比久久综合| 国产成人综合久久久久久| 色噜噜狠狠色综合网| 精品综合久久久久久888蜜芽| 狠狠色噜噜色狠狠狠综合久久| 欧美αv日韩αv另类综合| 五月天激情综合网| 欧美综合区综合久青草视频| 亚洲欧美日韩国产综合| 综合精品欧美日韩国产在线| 婷婷成人丁香五月综合激情| 狠狠久久综合伊人不卡| 丁香婷婷色五月激情综合深爱| 狠狠狠色丁香婷婷综合久久俺| 久久综合噜噜激激的五月天| 日韩亚洲国产综合久久久| 一本大道加勒比久久综合| 狼狼综合久久久久综合网| 国产在线五月综合婷婷| 激情五月综合网| 亚洲国产成人久久综合区| 亚洲欧美日韩综合二区三区| 91精品国产综合久久香蕉| 亚洲综合最新无码专区| 亚洲综合亚洲综合网成人| 国产婷婷色综合AV蜜臀AV| 国产亚洲综合久久系列| 综合色婷婷| 亚洲综合色在线| 99久久婷婷国产综合亚洲| 久久婷婷五月综合国产尤物app |