C語言 sizeof 和 strlen 的區別

2021-10-06 19:44:44 字數 714 閱讀 3517

sizeof和strlen的區別

strlen計算字串的長度

,以'\0'為字串結束標誌

sizeof是分配的陣列實際所佔的記憶體空間大小

,不受裡面儲存內容

例如 :

char *str = "1111111abcd";

char str1[9] = ;

sizeof(str)  = 4; //是指指標所佔的位元組大小,在c/c++中乙個指標佔4個位元組(32位系統)

sizeof(str1) = 9;

sizeof()是運算子,由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、結構或陣列的空間,返回值跟這些裡面所儲存的內容沒有關係。

具體而言,當引數分別如下時,sizeof返回的值含義如下:

陣列-編譯時分配的陣列空間大小

指標-儲存該指標所用的空間大小

型別-該型別所佔的空間的大小

物件-物件的實際占用空間大小

函式-函式返回型別所佔空間的大小

strlen()是函式,可以計算字串的長度,直到遇到結束符null才結束,返回的長度大小不包含null

小技巧: 如何計算陣列中元素的個數?

int a[3];

元素個數為:陣列的總大小/乙個型別的大小

sizeof(a)/sizeof(a[0]);

關於C語言sizeof運算子和strlen 函式

c primer plus總結 1.不同點 sizeof運算子是以位元組為單位返回運算子物件的大小 strlen 函式給出字串中的字元長度 2.相同點 sizeof運算子和strlen 函式返回型別可以用 zd轉換 不識別 zd,嘗試換成 u或者 lu sizeof運算子和strlen 函式返回的實...

C語言的sizeof和strlen

strlen是函式,而sizeof是算符。strlen需要進行一次函式呼叫,而對於sizeof而言,因為緩衝區已經用已知字串進行了初始化,其長度是固定的,所以sizeof在編譯時計算緩衝區的長度。strlen是遇到0或者 0 都會停止運算的,而sizeof是每個字元都會算的,不會漏掉0 或者 0 因...

C語言的sizeof和strlen

strlen是函式,而sizeof是算符。strlen需要進行一次函式呼叫,而對於sizeof而言,因為緩衝區已經用已知字串進行了初始化,起長度是固定的,所以sizeof在編譯時計算緩衝區的長度。因為sizeof 測試的是陣列的長度。而strlen測試的是字串的長度。在定義陣列時,字串後面還有乙個結...