關於 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...