- N +

sizeof和strlen的區(qū)別及使用詳解 c語言sizeof怎么計算字節(jié)數(shù)

大家好,關(guān)于sizeof和strlen的區(qū)別及使用詳解很多朋友都還不太明白,不過沒關(guān)系,因為今天小編就來為大家分享關(guān)于c語言sizeof怎么計算字節(jié)數(shù)的知識點,相信應(yīng)該可以解決大家的一些困惑和問題,如果碰巧可以解決您的問題,還望關(guān)注下本站哦,希望對各位有所幫助!

為什么sizeof數(shù)組小于strlen

因為sizeof數(shù)組取的是屬于頭部指針的字節(jié)數(shù),指針都是4個字節(jié)長度,strlen是整個字符串的長度

sizeof與strlen的區(qū)別

區(qū)別就是兩者意思是不一樣具體的不同如下

sizeof中文意思是sizeof是C語言中保留關(guān)鍵字,也可以認為是一種運算符,單目運算符。常見的使用方式:inta=10;intarr[]={1,2,3};charstr[]="hello";

strlen中文意思是strlen函數(shù):當計算長度時,只有遇到'\0'才會停止計算,同時計算的長度不包含'\0'。場景一,arr字符數(shù)組中存儲的是一個字符串

C語言中要使用sizeof()應(yīng)包含那個頭文件

C語言中,要使用sizeof()不需要包含頭文件,因為sizeof實際是C語言的一種單目運算符,也是關(guān)鍵字之一,可以直接使用。在C語言中,sizeof()是一個判斷數(shù)據(jù)類型或者表達式長度的運算符,簡單的說其作用就是返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù)。sizeof計算對象的大小也是轉(zhuǎn)換成對對象類型的計算,也就是說,同種類型的不同對象其sizeof值都是一致的。sizeof對一個表達式求值,編譯器根據(jù)表達式的最終結(jié)果類型來確定大小,一般不會對表達式進行計算。一般的,在32位編譯環(huán)境中,sizeof(int)的取值為4。擴展資料:sizeof與strlen區(qū)別:

1、strlen(char*)函數(shù)求的是字符串的實際長度,直到遇到第一個'\0',然后就返回計數(shù)值,且不包括'\0'。而sizeof()函數(shù)返回的是變量聲明后所占的內(nèi)存數(shù),不是實際長度。

2、數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了。

3、sizeof可以用類型做參數(shù),strlen只能用char*做參數(shù),且必須是以''\0''結(jié)尾的。

sizeof和strlen的區(qū)別

sizeof和strlen是兩個不同的C語言函數(shù),主要有以下區(qū)別:

1.作用對象不同:sizeof是用于計算數(shù)據(jù)類型的大小,而strlen是用于計算字符串的長度。

2.參數(shù)類型不同:sizeof可以計算任意數(shù)據(jù)類型的大小,包括基本數(shù)據(jù)類型、結(jié)構(gòu)體、數(shù)組、指針等等,而strlen只能計算以空字符'\0'結(jié)尾的字符串的長度,即字符數(shù)組或指向字符數(shù)組的指針。

3.返回值類型不同:sizeof返回的是一個無符號整數(shù),表示數(shù)據(jù)類型或變量占用的字節(jié)數(shù),而strlen返回的是一個整數(shù),表示字符串的長度,不包含空字符'\0'。

4.計算方式不同:sizeof在編譯時就能夠計算出數(shù)據(jù)類型或變量的大小,而不需要在運行時計算;而strlen需要遍歷字符串的每個字符,直到遇到空字符'\0'才能確定字符串的長度。

總之,sizeof和strlen是兩個不同的函數(shù),應(yīng)該根據(jù)具體的需求選擇使用。如果需要計算字符串的長度,應(yīng)該使用strlen函數(shù);如果需要計算數(shù)據(jù)類型或變量的大小,應(yīng)該使用sizeof函數(shù)。

在C語言中Strlen是什么意思

Sizeof與Strlen的區(qū)別

1.sizeof操作符的結(jié)果類型是size_t,它在頭文件中typedef為unsignedint類型。

該類型保證能容納實現(xiàn)所建立的最大對象的字節(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.大部分編譯程序在編譯的時候就把sizeof計算過了是類型或是變量的長度這就是sizeof(x)可以用來定義數(shù)組維數(shù)的原因

charstr[20]="0123456789";

inta=strlen(str);//a=10;

intb=sizeof(str);//而b=20;

6.strlen的結(jié)果要在運行的時候才能計算出來,時用來計算字符串的長度,不是類型占內(nèi)存的大小。

7.sizeof后如果是類型必須加括弧,如果是變量名可以不加括弧。這是因為sizeof是個操作符不是個函數(shù)。

8.當適用了于一個結(jié)構(gòu)類型時或變量,sizeof返回實際的大小,

當適用一靜態(tài)地空間數(shù)組,sizeof歸還全部數(shù)組的尺寸。

sizeof操作符不能返回動態(tài)地被分派了的數(shù)組或外部的數(shù)組的尺寸

9.數(shù)組作為參數(shù)傳給函數(shù)時傳的是指針而不是數(shù)組,傳遞的是數(shù)組的首地址,

如:

fun(char[8])

fun(char[])

都等價于fun(char*)

在C++里參數(shù)傳遞數(shù)組永遠都是傳遞指向數(shù)組首元素的指針,編譯器不知道數(shù)組的大小

如果想在函數(shù)內(nèi)知道數(shù)組的大小,需要這樣做:

進入函數(shù)后用memcpy拷貝出來,長度由另一個形參傳進去

fun(unsigedchar*p1,intlen)

{

unsignedchar*buf=newunsignedchar[len+1]

memcpy(buf,p1,len);

}

我們能常在用到sizeof和strlen的時候,通常是計算字符串數(shù)組的長度

看了上面的詳細解釋,發(fā)現(xiàn)兩者的使用還是有區(qū)別的,從這個例子可以看得很清楚:

charstr[20]="0123456789";

inta=strlen(str);//a=10;>>>>strlen計算字符串的長度,以結(jié)束符0x00為字符串結(jié)束。

intb=sizeof(str);//而b=20;>>>>sizeof計算的則是分配的數(shù)組str[20]所占的內(nèi)存空間的大小,不受里面存儲的內(nèi)容改變。

上面是對靜態(tài)數(shù)組處理的結(jié)果,如果是對指針,結(jié)果就不一樣了

char*ss="0123456789";

sizeof(ss)結(jié)果4===》ss是指向字符串常量的字符指針,sizeof獲得的是一個指針的之所占的空間,應(yīng)該是

長整型的,所以是4

sizeof(*ss)結(jié)果1===》*ss是第一個字符其實就是獲得了字符串的第一位'0'所占的內(nèi)存空間,是char類

型的,占了1位

strlen(ss)=10>>>>如果要獲得這個字符串的長度,則一定要使用strlen

strlen與sizeof的區(qū)別

1、strlen和sizeof代表的含義不同

在定義時,要知道到strlen是一個函數(shù),它用來計算指定字符串str的長度,但不包括結(jié)束字符(即null字符)。而sizeof是一個單目運算符,而不是一個函數(shù),它的參數(shù)可以是數(shù)組、指針、類型、對象、函數(shù)等。這就是strlen和sizeof的最本質(zhì)區(qū)別。

如果你不能提前區(qū)分strlen和sizeof所表示的含義和領(lǐng)域,那么就沒有研究下去的必要了。一旦運用是發(fā)生混淆或者用錯,那么肯定不可能完成既定目標。在使用時一定要牢記這一點最基本的區(qū)別

2、strlen和sizeof的功能不一樣

想要區(qū)分strlen和sizeof,那么就要了解strlen和sizeof兩者都有什么功能。只有知道了strlen和sizeof的功能,才能更好的去靈活運用它們。

相比較來說sizeof的功能能比較簡單,主要是:獲得保證,能容納實現(xiàn)所建立的最大對象的字節(jié)大小。而strlen的功能就比較多和繁瑣了,是返回字符串的長度,這個字符串可能是自己定義的,也可能是內(nèi)存中隨機的,這個函數(shù)實際完成的功能是從代表該字符串的第一個地址開始遍歷,直到遇到結(jié)束符NULL,返回的長度大小不包括NULL。

好了,文章到這里就結(jié)束啦,如果本次分享的sizeof和strlen的區(qū)別及使用詳解和c語言sizeof怎么計算字節(jié)數(shù)問題對您有所幫助,還望關(guān)注下本站哦!

返回列表
上一篇:
下一篇: