sizeof和strlen详解
一、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));//随机值
-