關於 strlen 與 sizeof 的區別

2021-08-20 21:07:37 字數 1851 閱讀 1270

關於 strlen 與 sizeof 的區別,我相信很多人都有所了解。以下我總結了幾點關於strlen 與 sizeof 的區別和注意事項。

1. strlen 是函式,sizeof 是運算子。

2. strlen 測量的是字元的實際長度,以'\0' 結束。而sizeof 測量的是字元的分配大小。

比如:[cpp] 

view plain

copy

char

str[20] = 

"hello"

;  printf("strlen: %d\n"

, strlen(str));  

printf("sizeof: %d\n"

, sizeof

(str));  

結果顯示為:

[cpp] 

view plain

copy

[root@localhost 0703]# ./hello   

strlen: 5  

sizeof

: 20  

3.但是在子函式中,ziseof 會把從主函式中傳進來的字元陣列當作是指標來處理。指標的大小又是由機器來決定,而不是人為的來決定的。

[cpp] 

view plain

copy

#include 

void

size_of(

char

str)  

intmain()  

結果顯示為sizeof:4

4.我們知道字元陣列的初始化一次性賦值,也可以逐個賦值。可以指定陣列的大小,也可以不指定陣列長度。

[cpp] 

view plain

copy

#include 

#include 

intmain()  

;  char

str3 = ;  

printf("str1:%s\n"

,str1);  

printf("str2:%s\n"

,str2);  

printf("str3:%s\n"

,str3);  

printf("str1:%d\n"

, strlen(str1));  

printf("str2:%d\n"

, strlen(str2));  

printf("str3:%d\n"

, strlen(str3));  

return

0;  

}  結果顯示為:

[cpp] 

view plain

copy

str1:hello  

str2:hello  

str3:hellohello  

str1:5  

str2:5  

str3:10  

這是為什麼呢?

我們知道字串是以 '\0' 為結束標誌的,所以char str1[ ] = "hello" 等效於char str2[ ] = 。strlen函式求的是字串的實際長度,它求得方法是從開始到遇到第乙個'\0',如果你只定義沒有給它賦初值,這個結果是不定的,它會從首位址一直找下去,直到遇到'\0'停止。而如果不在字元陣列初始化的時候加上\0,那麼strlen 得到的值就不是正確的數值,列印出來的結果也不是想要的結果。因此我們要避免這種情況,在初始化的時候要記得加上 \0,或者一次性賦初值。

5.strlen的結果要在執行的時候才能計算出來,是用來計算字串的長度,不是型別佔記憶體的大小。而大部分編譯程式在編譯的時候就把sizeof計算過了是型別或是變數的長度。

6.sizeof可以用型別做引數,strlen只能用char*做引數,且必須是以''\0''結尾的。

關於strlen與sizeof的區別

假設有以下 void main void cout 分析 strlen函式測量字串陣列時,返回實際儲存的字元長度,而不是為陣列分配的空間大小,sizeof運算子正好相反,當它對字串陣列ch進行操作時,它返回為陣列分配的空間大小。因此,前兩個輸出語句結果分別是10 20。pch為字串指標,因此也可以用...

關於 strlen 與 sizeof 的區別

關於 strlen 與 sizeof 的區別,我相信很多人都有所了解。以下我總結了幾點關於strlen 與 sizeof 的區別和注意事項。1.strlen 是函式,sizeof 是運算子。2.strlen 測量的是字元的實際長度,以 0 結束。而sizeof 測量的是字元的分配大小。比如 char...

關於sizeof與strlen用法的討論

今天在進行乙個多執行緒檔案傳輸的時候,在考慮到收發資料報的組成與拆包時,總是發現收發包會出現錯誤,導致收發報的失敗。後來通過仔細檢查,原來是 sizeof與strlen用法出現了錯誤,經過查詢,我把資料拿出來和大家一起分享。1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef...