sizeof和strlen求数组长度的区别

sizeof和strlen求数组长度的区别

>>sizeof

1.sizeof的本质:求数据类型或变量所占空间的大小,单位:字节
·sizeof求数组的长度

int arr2[] = { 1,2,3,4 };
	int a = sizeof(arr2) / sizeof(arr2[0]);
	printf("%d", a);

数组的长度指的是数组中元素的个数
例子中:
sizeof(arr2)求的是数组的大小,4个整型元素,1个整型占4个字节。
sizeof(arr2)=16字节 ,sizeof(arr[0])=4字节
int a=sizeof(arr2)/sizeof(arr[0])=4;由此求得数组长度。

·sizeof求字符串长度

char arr1[] = "abc";//字符串数组
	int a = sizeof(arr1);
	printf("arr1:%d\n", a);
	arr1:4

E:\Code\c_primary\Project22_12_15_2\x64\Debug\Project22_12_15_2.exe (进程 11652)已退出,代码为 0。
按任意键关闭此窗口. . .

求数组长度:a=sizeof(arr)/sizeof(arr[0]);
字符串数组中的元素是字符:sizeof(arr[0])=1;
所以,字符串数组长度 a=sizeof(arr);

字符串用""作用,以\n结尾,例子中:"abc"中末尾藏着\0;在sizeof眼中,\n也是字符。所以算出”abc"长度为4

·sizeof求字符数组

char arr2[] = { 'a','b','c' };//字符数组
	int a = sizeof(arr2);
	printf("arr2:%d\n", a);
	arr2:3

E:\Code\c_primary\Project22_12_15_2\x64\Debug\Project22_12_15_2.exe (进程 4316)已退出,代码为 0。
按任意键关闭此窗口. . .

*这里提到的字符串数组和字符数组其实是一个东西,它是字符数组的两种不同的赋值方式。只是因为这两种赋值方式导致数组中有无\0;所以加以区别

{‘a’,‘b’,‘c’}这种赋值方式数组中没有\0; “abc"有\n; 因为”abc"是字符串,字符串以\0结尾。sizeof计算的是数组中元素的个数,所以char arr2[]={‘a’,‘b’,‘c’};
sizeof(arr2)=3; char arr1[]=”abc"; sizeof(arr1)=4;

>>strlen

·strlen求数组的长度
strlen求数组的长度需要包含头文件#include<string.h>
strlen是专门用来求字符串长度的库函数,它统计的是\0前面的元素的个数

·strlen不能用来求普通数组长度,如整型数组

#include<string.h>
int main()
{
	int arr1[] = {1,2,3};
	int a = strlen(arr1);
	printf("a=%d", a);
	return 0;
}
a=1
E:\Code\c_primary\Project22_12_15_2\x64\Debug\Project22_12_15_2.exe (进程 624)已退出,代码为 0。
按任意键关闭此窗口. . .

显然,这里的数组长度为3不为1;

·strlen不能用来求非字符串的字符数组(字符串以\0结尾)

#include<string.h>
int main()
{
	char arr1[] = {'a','b','c'};//没有以\0结尾,所以不是字符串
	int a = strlen(arr1);
	printf("a=%d", a);
	return 0;
}
a=74
E:\Code\c_primary\Project22_12_15_2\x64\Debug\Project22_12_15_2.exe (进程 15348)已退出,代码为 0。
按任意键关闭此窗口. . .


该字符数组没有以\0结尾,所以不是字符串。strlen统计的是\0前的字符个数。所以strlen会在空间中寻找\0; 直到它找到\0再统计其前面的字符个数。因为每个人每次创建的变量所在的空间不同。所以\0随机出现,strlen算出的值为>字符数组的任意值。

·strlen专门用于计算字符串的长度

字符串表示1

#include<string.h>
int main()
{
	char arr1[] = {'a','b','c','\0'};//以‘\0’结尾,所以该字符数组是字符串
	int a = strlen(arr1);
	printf("a=%d", a);
	return 0;
}
a=3
E:\Code\c_primary\Project22_12_15_2\x64\Debug\Project22_12_15_2.exe (进程 24664)已退出,代码为 0。
按任意键关闭此窗口. . .

字符串表示2

#include<string.h>
int main()
{
	char arr1[] = "abc";//字符串默认以\0结尾
	int a = strlen(arr1);
	printf("a=%d", a);
	return 0;
}
a=3
E:\Code\c_primary\Project22_12_15_2\x64\Debug\Project22_12_15_2.exe (进程 30352)已退出,代码为 0。
按任意键关闭此窗口. . .

*总结:
1.sizeof计算的是数组中元素的个数,可以求所有非字符串的数组长度。
2。strlen是专门用来求字符串长度的库函数,它统计的是\0前面的元素的个数。专用于求字符串长度。
c语言中字符串的两种表示方式
1.char arr[]={‘a’,‘b’,‘c’,‘\0’};//一定要以’\0’结尾,否则不是字符串
2.char arr[]=“abc";//使用双引号。默认为字符串(末尾默认有’\0’)

  • 13
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值