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’)