嵌入式技术
大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是C语言sizeof和strlen的区别,希望能对你有所帮助
sizeof是C语言中的一个关键字,用于计算数据类型或变量所占用的字节数。它的用法是sizeof(type)或sizeof(variable),其中type是数据类型,variable是变量名。例如,sizeof(int)计算的是int类型变量所占用的字节数,通常是4个字节,而sizeof(float)计算的是float类型变量所占用的字节数,通常是4个字节。
strlen是库函数,其参数是一个指向字符串常量或者字符数组的的指针,用于计算指针指向的字符串的大小,当遇到‘’停止计数,不会统计‘’。它的用法是strlen(string),其中string是字符串名或字符串常量。例如,strlen("hello")计算的是字符串"hello"的长度,为5。
1,sizeof是运算符,strlen是库函数
2,sizeof是在编译时就计算好了,strlen在运行时计算
3,strlen计算字符串的长度时,遇到‘’停止计数,不会统计‘’;而sizeof统计‘’(在计算字符数组时)
3.1 在一维数组中的使用
#include < stdio.h >
#include < string.h >
int main()
{
int arr1[5] = { 1,2,3,4,5 };
int arr2[6] = { 1,2,3,4,5 };
int arr3[] = { 1,2,3,4,5 };
char arr4[5] = { 'h','e','l','l','o' };
char arr5[6] = { 'h','e','l','l','o' };
printf("sizeof arr1:%d
",sizeof(arr1));
printf("sizeof arr2:%d
",sizeof(arr2));
printf("sizeof arr3:%d
",sizeof(arr3));
printf("sizeof arr4:%d, strlen arr4:%d
",sizeof(arr4), strlen(arr4));
printf("sizeof arr5:%d, strlen arr5:%d
",sizeof(arr5), strlen(arr5));
return 0;
}
解释:
int类型占4个字节,arr1数组五个元素,所以占20个字节;arr2数组6个元素,所以占24个字节。
这里要注意的是,arr2数组的初始化方式采用的是不完全初始化,数组长度定了,但只有一部分赋值了,未被赋值的元素,系统自动赋初值为0。所以arr2就相当于 int arr2[ 6 ] = { 1 , 2 , 3 , 4 ,5,0 }; 数组arr3是没有指定数组长度,则初始化时赋值了多少个元素,数组的长度即为多少。
sizeof(arr4) 和 sizeof(arr5) ,这个好理解,计算数组占用的空间,char类型1个字节,arr4数组5个元素,arr5数组6个元素,因此sizeof(arr4) 和 sizeof(arr5)分别为5和6
**strlen(arr4) 和 strlen(arr5) **这个看起来可能有点懵,由于对arr4这个数组进行了完全初始化,strlen()遇到‘’停止计数,但数组arr4中没有‘’,所以会继续往下找,直到遇到‘’为止。这里的strlen(arr4) 得到的是一个随机值。
strlen(arr5)对数组进行了不完全初始化,未被赋值的元素,系统自动赋初值为0,字符类型,当然会被赋值为‘’,而strlen计算时,遇到‘’停止计数,但不会统计‘’,所以还是5
输出结果:
sizeof arr1:20
sizeof arr2:24
sizeof arr3:20
sizeof arr4:5, strlen arr4:10
sizeof arr5:6, strlen arr5:5
sizeof一种最常见的用法,就是用来求数组的长度
#define MAX_NUM (sizeof(arr)/sizeof(arr[0]))
3.2 在字符串中的使用
例子:
#include < stdio.h >
#include < string.h >
int main()
{
char *str1="abcde";
char str2[]="abcde";
char str3[8]={'a',};
int str4[8]={'a',};
char str5[] = "0123456789";
printf("sizeof str1:%d, strlen str1:%d
",sizeof(str1), strlen(str1));
printf("sizeof str2:%d, strlen str2:%d
",sizeof(str2), strlen(str2));
printf("sizeof str3:%d, strlen str3:%d
",sizeof(str3), strlen(str3));
printf("sizeof str4:%d, strlen str4:%d
",sizeof(str4), strlen(str4));
printf("sizeof str5:%d, strlen str5:%d
",sizeof(str5), strlen(str5));
return 0;
}
解释:
sizeof(str1) 和 strlen(str1) :前者表示计算指针占用的空间,在32位系统指针占4个字节,64位系统,指针占8个字节;我这里是64位系统
strlen(str1)计算字符串长度,这里要注意的是字符串常量时,系统会自动在末尾补‘’,所以这里strlen(str1)为5,不会是个随机值。
sizeof(str2) 和 strlen(str2) :末尾有'',所以sizeof(str2)为6,strlen(str2)为5
sizeof(str3) 和 strlen(str3) :sizeof(str3) 数组8个元素,每个元素占1个字节,所以为8;strlen(str3),8个元素,一个元素为字符'a',其余元素都为'',strlen遇到‘’停止计数,不会统计‘’,所以为1
sizeof(str4) 和 strlen(str4) :sizeof(str4) 数组8个元素,每个元素占4个字节,所以为32;strlen(str4)同strlen(str3)类似。
sizeof(str5) 和 strlen(str5) 跟第二个数组一样,就不解释了。
输出结果:
sizeof str1:8, strlen str1:5
sizeof str2:6, strlen str2:5
sizeof str3:8, strlen str3:1
sizeof str4:32, strlen str4:1
sizeof str5:11, strlen str5:10
当然sizeof也会用来求结构体的字节数,这会涉及到结构体的对齐问题,就不在此处举例说明,后面单独介绍。
全部0条评论
快来发表一下你的评论吧 !