用sizeof和strlen分别求字符串长度辨析

请先看以下代码:

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

int main()

{
	
	char a[]={'h','e','l','l','o'};
	char b[]="hello";
	char c[]="he\0llo\0";
	printf("strlen(a) = %d  sizeof(a) = %d\n",strlen(a),sizeof(a));
	printf("strlen(b) = %d  sizeof(b) = %d\n",strlen(b),sizeof(b));
	printf("strlen(c) = %d  sizeof(c) = %d\n",strlen(c),sizeof(c));
	return 0;
}



原因分析:

1. 由于strlen对字符进行遍历的时候,只有遇到\0的时候才停下,所有,数组a没有定义\0,所有strlen计算出的是一个系统的随机数7。而sizeof并不是遇\0而停下的,所以sizeof计算的是5;

2. 虽然“hello”没有\0,但系统默认这样定义后面有隐含的“\0”,所以,strlen遇到\0停下,是5,而sizeof则会把\0当成一个字符,然后计算结果是6;

3. 由于strlen遇到\0会自动停止,所以,但遍历到he的时候,就会自动停止,所以是2.而sizeof不会停下,会一直遍历下去,知道没有元素,和第二个结果一样,\0后面隐含一个\0,所以sizeof(c)的结果是5(hello)+3(\0)=8;
                        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值