C语言:区分strlen和sizeof

下面我们来区分一次sizeof和strlen。

1.sizeof

sizeof是用来求类型对象所占内存空间大小的,他的单位是字节
举些栗子:

1.1求整型的所占空间大小:

int p = 0;
printf("%d", sizeof(p));

结果如下:
整型的存储是占据四个字节的,因此结果输出4
在这里插入图片描述

1.2求字符串

我们知道,C语言中没有一种专门的数据类型来存储字符串。那么掌这里我们选择使用字符数组来进行存储,而字符数组也有两种存储方式。
第一种是将字符串直接整体存储,如acX。
第二种是将每个字符分别存储,如acY。

char acX[] = "abcdefg";
char acY[] = { 'a','b','c','d','e','f','g' };
printf("sizeof:%d\n", sizeof(acX));
printf("sizeof:%d\n", sizeof(acY));

结果如下:

我们知道在ASCALL码表中,一个英文字符占一个字节。而字符串在存储中末尾会自动加上一个转义字符"/0",这个/0是隐藏的,他是字符串的结束标志
那么当我们使用sizeof来求acX的大小时,便会加上末尾的"/0",求acY的大小时,由于是每个字符每个字符的存储,因此没有/0的存在,所以下面结果中acX比acY多1.

在这里插入图片描述
在内存中的表现如下:
acX:
在这里插入图片描述

acY:
在这里插入图片描述

1.3求数组大小

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int m = sizeof(arr);
int n = sizeof(arr[0]);

printf("m = %d  n = %d", m, n);

以下是运行结果:
在这里插入图片描述

整型的存储是占据四个字节的,sizeof(arr)求出的就是数组中所有元素所占的内存空间大小,而sizeof(arr[0])由于我们确定了元素arr[0],因此求的就是数组中一个元素所占空间的大小。
那么我们可以通过这两个的比值来求出数组中元素的个数。

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int o = sizeof(arr) / sizeof(arr[0]);
printf("该数组大小为:%d\n", o);

结果如下:
在这里插入图片描述

2.strlen

strlen是用来求字符串的长度的,当遇到“\0"时我们就要停止读取,此时“\0"前字符的个数就是字符串的长度。
注意:
(1)这里的"/0"是停止标志,遇到后就停止读取,它不算一个字符。
(2)使用strlen时需要包含头文件string.h
下面来一些栗子:

2.1

char acX[] = "abcdefg";
char acY[] = { 'a','b','c','d','e','f','g' };
printf("strlen:%d\n", strlen(acX));
printf("strlen:%d\n", strlen(acY));

在这里插入图片描述

这里两个值差的较多,原因是strlen函数结束的标志是遇到"/0",它只有在遇到想遇见的才会停止。
在acX末尾处由于自动添加了"/0",因此会读取到g后面就会停止。
而acY由于是一个字符一个字符的存储,所以末尾并没有"/0",因此它就会继续向下走,寻找它的"/0",直到碰到"/0"才会停止,所以显示的42是它在遍历了42个字符才遇到的"/0"。
由于编译器等原因,这个值可能每个人和每个人是不一样的。

以上是本次所有内容,谢谢观看。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值