C++字符串长度与字节的问题

#include<iostream>usingnamespacestd;voidmain(){char*str="12345";cout<<strlen(str)<<"\... #include<iostream>
using namespace std;
void main()
{
char* str="12345";
cout<<strlen(str)<<"\t"<<sizeof(str);
}

为什么输出结果是 5 4 ?不是应该有结束符的吗,长度不是应该为6吗???字节怎么还变成4了?不是6嘛?
展开
 我来答
490749157
2009-11-22 · TA获得超过738个赞
知道小有建树答主
回答量:276
采纳率:100%
帮助的人:345万
展开全部
strlen()是求字符的长度,字符串中有多少字符就输出几,不包括结束符‘\0’;
sizeof()是求其在内存中的长度。
sizeof(str)=4;因为str是指针啊。所有指针都占四个字节。
如果要输出6,那应该是sizeof(“12345”);
百度网友350302d
2009-11-22 · TA获得超过669个赞
知道小有建树答主
回答量:1048
采纳率:0%
帮助的人:622万
展开全部
1、strlen函数是返回字符长度(以空字符为结束符)
所以是5
2、sizeof(str);返回是指定变量占用空间大小
str是指针变量,指针大小为4,所以返回4
你可以把str变成数组

char str[]="12345";
此时str是数组,所以sizeof(str)返回的是6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7dec091
2009-11-22
知道小有建树答主
回答量:22
采纳率:0%
帮助的人:8.8万
展开全部
strlen()函数返回不包含结束符的长度

sizeof(str)得到的是类型char*的长度
如果定义是:
char str[]="12345";
那么sizeof(str)就是6了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杨卓烨
2009-11-22 · 超过32用户采纳过TA的回答
知道答主
回答量:239
采纳率:0%
帮助的人:113万
展开全部
你定义的是指针变量,他的sizeof(str)就是4,这是规定
要是换成数组就不是啦,就和你想的一样啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
renjianke
推荐于2018-03-20 · TA获得超过2932个赞
知道小有建树答主
回答量:580
采纳率:0%
帮助的人:673万
展开全部
char str[] = “12345”
char *str = "12345"
含义不同,
char str[] = “12345”是字符数组,str里有‘1’‘2’‘3’‘4’‘5’‘\0’。每个字符许一个字节,所以为 6个字节。

char *str = "12345"含义是,指针str指向"12345",str的值是"12345"中首字符的‘1’地址。
也就是说,用char *str = "12345"比char str[] = “12345”
多分配了一个存储地址的空间,用于存储字符数组的首地址,这个存储空间是多大(占有几个字节)?一般32位机器和现行的编译器,指针的长度一般指定为4个字节,记住就是了。

strlen求长度不包含‘\0’。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式