關於 strlen 與 sizeof 的區別,我相信很多人都有所了解。以下我總結了幾點關於strlen 與 sizeof 的區別和注意事項。
strlen ()
sizeof()
函式運算子
計算字串長度
計算型別所佔記憶體大小
執行結束時才計算出
編譯階段計算
引數只能是char*
引數可以是型別也可以是char*
測量字元的實際長度(以\0結束)
測量字元實際分配的大小
(1) strlen 是函式 ,sizeof 是運算子。
(2) strlen 測量的是字元的實際長度,以』\0』 結束。而sizeof 測量的是字元分配空間的大小。比如:
char str[20]
="hello"
;printf
("strlen: %d\n"
,strlen
(str));
printf
("sizeof: %d\n"
,sizeof
(str)
);
結果顯示為:
strlen:
5sizeof:20
請按任意鍵繼續.
..
(3) 但是在子函式中,sizeof 會把從主函式中傳進來的字元陣列當作是指標來處理。指標的大小又是由機器來決定,而不是人為的來決定的。
#include
void
size_of
(char str)
//形參接收的是陣列首元素位址
intmain()
結果顯示為 sizeof:4
(4) 我們知道字元陣列的初始化一次性賦值,也可以逐個賦值。可以指定陣列的大小,也可以不指定陣列長度。
#include
#include
intmain()
;char str3=
;printf
("str1=%s\n"
,str1)
;printf
("str2=%s\n"
,str2)
;printf
("str3=%s\n"
,str3)
;printf
("str1 strlen:%d\n"
,strlen
(str1));
printf
("str2 strlen:%d\n"
,strlen
(str2));
printf
("str3 strlen:%d\n"
,strlen
(str3));
printf
("str1 sizeof:%d\n"
,sizeof
(str1));
printf
("str2 sizeof:%d\n"
,sizeof
(str2));
printf
("str3 sizeof:%d\n"
,sizeof
(str3));
return0;
}
結果顯示為:
str1=hello
str2=hello
str3=hello燙燙燙燙燙蘦ello
str1 strlen:
5 str2 strlen:
5 str3 strlen:
21//此處是隨機值
str1 sizeof:6
str2 sizeof:6
str3 sizeof:5
請按任意鍵繼續.
..
這是為什麼呢?
我們知道字串是以 『\0』 為結束標誌的,所以char str1[ ] = 「hello」 等價於char str2[ ] = 。strlen函式求的是字串的實際長度,它求得方法是從開始直到遇到第乙個』\0』。
如果只定義而沒有給它賦初值,這個結果是不定的,它會從首位址一直找下去,直到遇到』\0』停止。比如str3,初始化時沒有在字串結尾加\0,所以strlen(str3)計算所得的結果不是我們想要的結果。
因此我們要避免這種情況,在初始化的時候要記得加上\0,或者一次性賦初值。
(5)strlen的結果要在執行的時候才能計算出來,是用來計算字串的長度,不是型別佔記憶體的大小。而大部分編譯程式在編譯的時候就把sizeof計算過了是型別或是變數的長度。
(6) sizeof可以用型別做引數,strlen只能用 char* 做引數,且必須是以』\0』結尾的。
char arr1=
"hello"
;printf
("%s\n"
,strlen
(arr1));
//這裡的arr1是首元素位址
printf
("%d\n"
,sizeof
(char))
;//1byte
sizeof與strlen的比較(C )
本文主要介紹在c 語言中,sizeof 與 strlen 兩種用法的比較。下面通過 示例,更清晰地比較 sizeof 與 strlen 的用法和作用。示例 sizeof and strlen test1.cpp 如下 include include include using namespace s...
C語言sizeof 與 strlen的比較
今天看了個演算法的題目,說是要合併兩個有序陣列,按照有序的方式。看看以為很簡單的,想當然的就開始敲程式了,但是發現了很多小問題,這些都是基礎啊,突出的是sizeof 的問題。sizeof 獲取的是乙個型別的佔據位元組長度,strlen 獲取字串的長度 兩次失足後,我不在做這些無聊的嘗試了,仔細找找問...
C 中sizeof與strlen的區別
1.strlen 是函式,strlen char 函式求的是字串的實際長度,直到遇到第乙個 0 然後就返回計數值,且不包括 0 函式的返回值值在執行時確定。引數是指標或字元陣列,當陣列名作為引數傳入時,實際上陣列就退化成指標了。2.sizeof 是操作符,不是函式,返回的是變數 宣告後所佔的記憶體數...