初识C语言---------sizeof和strlen

sizeof——操作符,是计算变量所占内存空间的大小,单位是字节。

比如下面的一段简单代码

#include<stdio.h>

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

定义整型变量a初始化为10;int为整型,占四个字节,所以sizeof(a)为4,值得注意的是sizeof是操作符而不是函数,因此对变量a使用时可以不加括号(),但是对类型使用时必须加括号。

对于数组,sizeof也有着作用。

int main()
{
	int arr[] = { 1,2,3,4,5,6,7 };
	int ret = sizeof(arr);
	int rat = sizeof(arr[0]);
	int n = ret / rat;

	return 0;
}

打开监视窗口,可以看到

 整型数组arr有7个元素,而sizeof(arr)的值为28,类型为无符号整型。利用n可以计算出数组arr的元素个数。

strlen———库函数,是计算字符串的长度的,统计的是字符串中\0之前出现的字符个数。

下面来综合解析sizeof和strlen.

#include<stdio.h>
#include<string.h>


int main()
{
	char ch1[] = { 'a','b','c','d','e','f' };
	char ch2[] = "abcdef";
	printf("%d\n", sizeof(ch1));
	printf("%d\n", sizeof(ch2));
	printf("%d\n", strlen(ch1));
	printf("%d\n", strlen(ch2));
	return 0;
}

因为strlen为库函数,因此需要包含头文件#include<string.h>,上述代码的输出结果如下图

 为什么会这样的输出结果呢?下面来一一解析,观察ch1,ch2,前者为字符数组,后者为字符串。

char类型为一个字节,所以sizeof(ch1)为6个字节,但sizeof(ch2)为什么为7呢?其实ch2数组中还有一个\0,这个也算上。ch2中可以认为有"abcdef\0"这样的字符串。因此sizeof(ch1)和sizeof(ch2)的输出结果不一样。

 可以看出两者的不同。

那么为什么strlen(ch1)和strlen(ch2)的结果不同呢?strlen(ch2)不难理解,strlen统计的是\0之前的有效字符个数,有6个,那么到这里你可能会发现,ch1中没有\0啊,为什么输出的结果是19?在内存中ch1是这样分配的

 因为后面没有\0。

 因此会继续读取,直到找到\0为止,因此19为随机值,可能输出不同的值。

 当加上\0时的输出结果为这样。ch1,ch2初始化最终也会让\0放入数组中。

这次的分享就到这里了,如有错误或者建议,敬请提出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值