C語言中的sizeof()和strlen()的區別
sizeof()和strlen()經常會被初學者混淆,但其中有有很大區別:
1.sizeof()【運算元所占空間的位元組數大小】是一種c中的基本運算子,
可以以型別、指標、陣列和函式等作為引數,
頭檔案型別為unsigned int,
運算值在編譯的時候就出結果,所以可以用來定義陣列維數,
char a[5]="123";
int b=sizeof(a);//b=5
int c=strlen(a);//c=3
sizeof()是一種單目運算子,是用來計算你所使用的運算元所占的空間位元組大小,
2.strlen()[計算字串的長度]是一種函式,//"\0"作為終止符;
strlen的結果運行的時候才出來,是計算字串長度的,
其引數必須是字符型指標(char*),
函式宣告為 行內代碼片,頭檔案#include<string.h>
size_t strlen(const char *str)//size_t()
以下是一些具體的實體(vs2013 設定為32位):
int main()
{
char *p = "hello";
char arr1 []= "hello";
char arr2[] = { 'h', 'e', 'l', 'l', 'o' };
printf("%d\n", sizeof( p));
//結果4,因為指標變數的所占空間大小僅僅和作業系統位數有關32-4,64-8
printf("%d\n", sizeof(arr1));
//結果6,字串默認以\0結尾,sizeof()包含\0的計算
printf("%d\n", sizeof(arr2));
//結果為5,因為為字符型表示,并不含有\0(僅僅字串有\0)
printf("%d\n", strlen( p));
//結果為5,strlen求的是字串的長度,不包含\0
printf("%d\n", strlen(arr1));
//結果為5,strlen求的是字串的長度,不包含\0
printf("%d\n", strlen(arr2));
//因為字符型不包含\0,但字串需要找到\0才可結束,所以在'o'之后繼續向后讀取直到找到\0,所以是一個隨機值
結果如上;
設定為32位作業系統
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/180256.html
標籤:其他
