關於 strlen 與 sizeof 的區別

2021-07-14 08:26:42 字數 1568 閱讀 9028

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

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

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

比如:

char str[20] = "hello";

printf("strlen: %d\n", strlen(str));

printf("sizeof: %d\n", sizeof(str));

結果顯示為:

[root@localhost 0703]# ./hello 

strlen: 5

sizeof: 20

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

#include void size_of(char str)

int main()

結果顯示為sizeof:4

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

#include #include int main()

; 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;

}

結果顯示為:

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 測量的是字元的分配大小。比如 cpp ...

關於sizeof與strlen用法的討論

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