首先我们必须要清楚地定义是:
strlen是函数 but sizeof 是关键字
char arr1[] = “abc”;
char arr2[] = { ‘a’,‘b’,‘c’ }; 结果
1>> printf("%d\n", sizeof(arr1)); 4
2>> printf("%d\n", sizeof(arr2)); 3
3>> printf("%d\n", strlen(arr1)); 3
4>> printf("%d\n", strlen(arr2)); 随机数15
通过对比,不难发现:
- sizeof
-计算的是 **arr所占空间的大小** (会==包括\0==)
比如有n个元素*1(如果每个元素一个字节)=n
- strlen
-求字符串长度 找到‘\0’就会停止 并且\0==不算入== 求\0之前的字符个数
那么就可以知道两者的区别:
1.简单地说 sizeof计算空间算\0
但是
strlen计算长度不算\0
2.strlen只能求字符串长度——并且是库函数,使用时要引头文件scanf函数读取到空格就会停止,不读了,之后的内容也不会读入内存之中,
并且会在空格处放置一个’\n’来结束读入
可以使用
while ((i = getchar()) != EOF)//当读取到的不是\n的时候,就getchar()吞掉
{
getchar();
}
gets可以直接读取一行(直到碰到\n,否则一直读取),不管是否有空格
而sizeof是计算变量、数组、类型的大小-单位是字节——本质是操作符 不需引头文件
如果想要进一步了解数组的相关知识,请移步
C语言—>数组超详解
C语言博客