c/c++语言中strlen和sizeof的区别

本文探讨了C/C++中strlen()函数和sizeof运算符的区别。strlen计算字符串长度,直到遇到''结束符,而sizeof计算变量或类型的字节数。通过实例分析了sizeof在编译时计算,不会考虑'',而strlen在运行时计算字符串的实际长度。
摘要由CSDN通过智能技术生成

关于sizeof的用法,我已经在c语言操作符详解c语言32个关键字中详细说明。此篇不再赘述,看过这两篇博客的人肯定已经知道sizeof是一个c语言运算符,它可以计算一个变量或者类型的的字节长度。那么它和strlen()函数有何区别?

区别:

在这里插入图片描述
为了帮助大家理解上面的表格,举几个例子来说明一下,

int main()
{
	char a[] = "abc\012abc";
	char b[] = "abc\0abc";
	printf("sizeof(a)=%d\n", sizeof(a));//\012该字符串为一个八进制数据
	// \0后面跟数据表示一个八进制字符,不跟数据说明为字符串结束符\0
	printf("sizeof(b)=%d\n", sizeof(b));
	printf("strlen(a)=%d\n", strlen(a));
	printf("strlen(b)=%d\n", strlen(b));
	return 0;
}

运行结果:
在这里插入图片描述
上面例子要注意如果\0后面跟数字说明表示该数为一个八进制数的字符,\0后不跟数据说明就是字符串结束符’\0’;还有就是当a定义为字符串时,编译器会默认加上\0
那么我们来分析一下答案:
sizeof(a)计算的是a数组的空间大小,一共识别处7个字符加\0结束符,结果为8
sizeof(b)计算b字符串的空间大小,一共7个字符和\0,结果仍为8
strlen(a)计算的是a字符串的长度,遇到\0结束,所以共计7个字符
strlen(b)计算字符串b的长度,遇到\0之前只有abc三个字符,故结果为3
接下来这段代码可以帮助大家理解sizeof在哪个时间阶段执行

int main()
{
	int a = 3;
	sizeof(a++);
	printf("%d\n", a);
	return 0;
}

如果你认为结果为4,那么就说明你对sizeof的理解还不深刻。
结果:
在这里插入图片描述
原因上述表格已经说到,在程序运行过程中第二行代码不再执行,因此a的值不改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值