sizeof和strlen詳解
阿新 • • 發佈:2022-03-05
一、sizeof
-
陣列宣告時有長度
-
沒有初始化
char carr[5]; int iarr[5]; double farr[5]; printf("%d\n", sizeof(carr));//5 printf("%d\n", sizeof(iarr));//20 printf("%d\n", sizeof(farr));//40
-
初始化(初始化數量不能超過陣列長度)
char carr1[5]="abcde"; char carr2[5] = { 'a','b','c' }; int iarr[5] = {2,4}; double farr[5] = {3.3,4.5}; printf("%d\n", sizeof(carr1));//5 printf("%d\n", sizeof(carr2));//5 printf("%d\n", sizeof(iarr));//20 printf("%d\n", sizeof(farr));//40
-
結論
A、用字串初始化帶長度的字元陣列時,sizeof計算的陣列長度為宣告的陣列長度,與初始化字串無關。
-
-
陣列宣告時沒長度
-
沒有初始化
不允許這種情況。
-
初始化
char carr1[]="abc"; char carr2[] = { 'a','b','c' }; int iarr[] = {2,4}; double farr[] = {3.3,4.5}; printf("%d\n", sizeof(carr1));//4,用字串初始化字元陣列,包含字串結尾的空字元 printf("%d\n", sizeof(carr2));//3,有三個字元,每個字元一個位元組,結果為3 printf("%d\n", sizeof(iarr));//8,有兩個整形,每個整形4個細節,總共8個位元組 printf("%d\n", sizeof(farr));//16,有兩個雙精度型,每個double佔8個位元組,總共16個位元組
-
二、strlen
-
陣列宣告時有長度
-
沒有初始化
char carr[5]; printf("%d\n", strlen(carr));//隨機值
-
初始化
char carr1[5] = "abcd";//初始化字串長度小於字元陣列長度 char carr2[5] = "abcde";//初始化字串長度等於字元陣列長度 char carr3[5] = { 'a','b','c' }; printf("%d\n", strlen(carr1));//4 printf("%d\n", strlen(carr2));//隨機值 printf("%d\n", strlen(carr3));//3
-
結論
- 初始化字串長度小於字元陣列長度,計算結果為\0之前的字元個數
- 初始化字串長度等於字元陣列長度,向字元陣列後面尋找\0,直到遇到\0字元為止,返回前面的字元個數。
-
-
陣列宣告時沒長度
-
沒有初始化
不允許
-
初始化
char carr1[] = "abcd"; char carr2[] = { 'a','b','c' }; printf("%d\n", strlen(carr1));//4 printf("%d\n", strlen(carr2));//隨機值
-