sizeof与strlen的区别

先看以下代码

int main() {

	char acX[] = "abcdefg";
	char acY[] = { 'a','b','c','d','e','f','g' };


	printf("%d\n", sizeof(acX));
	printf("%d\n", sizeof(acY));
	printf("%d\n", strlen(acX));
	printf("%d\n", strlen(acY));
	return 0;
}

运行结果
在这里插入图片描述

sizeof

在这里我们可以把sizeof看成宏观的大小,sizeof(acX)为什么是8,因为我们知道这种连起来的字符最后一位使用\0来阻断的。也就是说虽然你看到显示的是abcdefg7个字符但其实最后一位还有一个\0,只是没显示出来而已。所以说sizeof(acX)是8.

而第二种的char acY[] = { ‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’ };是不需要\0的,因为他们用单引号引起来了,几个就是几个,不需要截至。

strlen

在这里我们可以把sizeof看成微观的大小,它只拾取到截至符号\0前一位。就像char acX[] = “abcdefg”;实际上是abcdefg\0,\0不算所以就是7。

而第二个就比较离谱了,为什么差的那么大。这个其实也是一样的,它只会拾取\0才会停止,我们把内存调出来看一下。
在这里插入图片描述
调出内存发现到24位时才是00,也就是\0。
所以说printf(“%d\n”, strlen(acY));的输出结果是23。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值