C语言中sizeof和strlen区别

1、sizeof

sizeof计算变量所占内存内存空间大小,单位是字节。如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。

sizeof只关注占用内存空间的大小,不在乎内存中存放什么数据。

光看文字的话可能不好理解,下面我们看代码举例。

int main()
{
	int a = 0;
	printf("%zd\n", sizeof(a));//结果为4
	printf("%zd\n", sizeof(int));//结果为4
}

上面两行代码的打印结果都为4。

因此说明a在内存中占用四个字节。a是int类型变量,所以这里可以看成计算的是int类型在内存中占用空间的大小,因此上面两行代码的打印结果都为4。

注意:sizeof的返回值类型是size_t。

下面我们可以看一段有趣的代码

大家可以停在这里思考一会。

int main()
{
	short s = 10;
	int i = 2;
	int n = sizeof(s = i + 4);
	printf("%d\n", n);  
	printf("%d\n", s);
	return 0;
}

答案是 2  10

解答:s为short类型,占用2个字节。

           i是int类型,    占用4个字节。

       代码中,i+4的值想要赋给s,但是i+4为int类型,s为short类型,显然i+4占用内存比s要大,所以s装不下i,这里发生截断s还是short类型,因此sizeof(s=i+4)结果为2。第二个就很好理解了,我们将表达式放入sizeof中计算,此时s=i+4是不参与实际运算的,因此s还是10,结果显而易见也为10.

2、strlen

 strlen是C语言的一个库函数,功能是求字符串长度。

函数原型如下:

size_t strlen (const char *str);

统计的是从strlen函数参数str中这个地址开始向后,\0之前字符串的个数。

strlen函数会一直向后找\0字符,直到找到为止,所以可能存在越界查找。

下面我们看代码举例:

int main()
{
	char arr[] = "abcdef";
	printf("%d\n", strlen(arr));//打印结果为6
}
arr在内存中的地址

 

arr中元素

 我们可以看到字符串abcdef\0在内存中是连续的地址61 62 63 64 65 66 00,strlen在运算时遇到00结束,所以结果为6.

3、sizeof和strlen的对比

sizeof

                 1. sizeof是操作符

                 2. sizeof计算操作数所占内 存的⼤⼩,单位是字节

                 3. 不关注内存中存放什么数据。

strlen

                 1. strlen是库函数,使⽤需要包含头⽂件 string.h

                 2. srtlen是求字符串⻓度的,统计的是 \0 之前字符的隔个数

                 3. 关注内存中是否有 \0 ,如果没有 \0 ,就会持续往后找,可能会越界。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值