C语言之sizeof与strlen的区别

我们都知道sizeof计算的是数组的所有的大小,而strlen计算的是字符串的有效的大小,不能用sizeof来计算字符串的有效长度,切记sizeof是C语言里的一个关键字而不是函数,用strlen来计算字符串的大小的时候,它会一直往字符串下去跑,直到遇到‘\0’后结束计算,记得用strlen来算时’\0’是没有算进字符串的大小里的。

接下来直接用代码来体现一波;
1.首先举个例子先
例char data[20] = "hello”;
此时用sizeof来计算的话会算出的是20个字节的大小,而用strlen来算的话算出的是5个字节大小。
即sizeof(data)= 20;strlen(data)= 5;
还有一种char data[] = “hello”;
此时用sizeof(data)= 6;而strlen(data)= 5;
因为字符串hellol里隐含着一个’\0’,所以会算出6个字节的大小,而strlen依然是有效长度的大小

特别提醒,字符型指针指向字符串的机制。
char *pdata = “hello”;
字符型指针是保存字符串的首地址,而不是保存字符串的内容
例如上面pdata保存的是h的地址,而后面e以后的是指向他们

上代码:

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

int main()
{
	//比较sizeof与strlen的区别
	//知道strlen计算的是数组的有效长度,即计算出的是hello这五个字节
	//而sizeof求的是整个数组的大小,即求出的是128个字节
	char cdata[128] = "hello";
	char cdata1[] = "hello";
	
	//cdata1这个用sizeof求出的大小是6,因为字符串是隐含着'\0'结束的,加上\0就是6个
	//字符型指针是保存字符串的首地址,而不是保存字符串的内容
	//例如下面pdata保存的是h的地址,而后面e以后的是指向他们
	
	char *pdata = "hello";
	
	printf("sizeof: %d\n",sizeof(cdata1));
	printf("sizeof:%d\n",sizeof(cdata));
    printf("strlen: %d\n",strlen(cdata));	
	printf("sizeof: %d\n",sizeof(pdata));
	printf("strlen: %d\n",strlen(pdata));
	
	printf("sizeof: %d\n",sizeof(char));
	
	return 0;
}

输出结果
在这里插入图片描述
再次强调一下,指针的大小要不是8个字节就是4个字节,4个或8个是要根据编译器的位数来决定的,32位编译器是4个字节,而64位编译器是8个字节。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值