C++中sizeof和strlen的区别是什么?

 我来答
吉祥二进制
高粉答主

2015-05-29 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84579

向TA提问 私信TA
展开全部

  strlen:是C标准库中的字符串函数,用于统计字符的个数。

  sizeof:是c语言中的运算符,确切的说是一个编译时运算符,用于统计类型或者变量所占的内存字节数。示例,以32位系统为例。

char *str = "hello";
strlen(str); //它的值是5,因为hello这个字符串有5个字符
sizeof(str); //它的值是4,因为char *是一个指针类型,它占4个字节。
sizeof("hello"); //它的值是5,是因为hello有5个字符,每一个字符占1个字节。
int a[2] = {0};
sizeof(a); //它的值是8,因为a中有2个int型变量,每个int型占4个字节,所以8字节
匿名用户
2013-11-28
展开全部
1. sizeof 操作符的结果类型size_t,它在头文件中typedef为unsigned int类型: typedef unsigned int size_t. 2. sizeof是是长度运算符, 获得数据类型或是变量的长度,如果是数据类型,则返回数据类型大小,如果是用数组,则返回数组所占空间大小,strlen是计算字符串长度的函数,返回的是实际串长度,以char* 作参数 ,且必须是以'\0'结尾。3. sizeof在编译的时候就把计算过,strlen的结果要在运行的时候才能计算出来。4. 数组做长度运算符sizeof的参数不退化。数组做函数strlen的参数就退化为指针了,因为数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-28
展开全部
我们能常在用到 sizeof 和 strlen 的时候,通常是计算字符串数组的长度
从这个例子可以看得很清楚:har str[11]="0123456789";//注意这里str大小因该大于等于11,应考虑'\0'在内,否则编译器会报错
int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。
int b=sizeof(str); //而b=11; >>>> sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小,不受里面存储的内容改变。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yhy19820816
2013-11-25 · TA获得超过304个赞
知道小有建树答主
回答量:308
采纳率:0%
帮助的人:347万
展开全部
C
sizeof 是实际的存储空间。也就是这个字符数组实际在内存中占多少个字节。char a[7]定义的时候就已经分配空间了。7个。至于你存几个,随便,7个以下就存得下。以上就益出。
strlen 取字符串长度。也就是实际长度,不包括结束标志\0。字串以\0为结束标志。所以,遇到一个\0就代表结束了,这个字串实际就是a0.strlen(a)为2 。

补充:
char a[]="a0\0a0\0":没有数组下标,系统如何确定要给这个数组分配多少个内存单元呢?当然要看定义的时候赋值给他的元素个数了。你查一下,一共有几个?当然不要忘了最后的\0.
你蒙在哪里呢,就是对于\0的运用,如果把这个改一下。
char a[]="abcdef"你不会不懂了吧,那sizeof(a)一定是7.
那如果把上面的c和f改成\0呢?这里的\0只是做为其中的一个元素而已。是要占内存空间的。但是真正读取的时候要不要读那么多呢?当然不要,遇到第一个\0就不再进行读取了。但实际上这些\0以及\0后面的数据却仍然存在,而且做为字符串数组的一部分,要占用内存单元,这部分空间不允许再存放其他数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式