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

南楼画角 提交于 2019-11-28 09:31:38

关于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的值不改变。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!