关于C语言sizeof检测字符串长度的问题

charbuf[100];sizeof(buf);//结果等于100/************************/char*PP=buf;sizeof(PP);//... char buf[100];
sizeof(buf) ;//结果等于100
/************************/
char *PP = buf;
sizeof(PP);//结果等于4
/*************************/
struct B
{
char buf[100];
}Buf;
struct B *BB = &Buf;
sizeof(BB->buf);//结果等于100,而不是4
为什么会这样????
展开
 我来答
金色潜鸟
推荐于2018-03-29 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5748万
展开全部
字符串长度用 strlen() 测定。
sizeof() 是 “运算符”,计算后面的 类型 或 变量 占据的内存(以字节为单位)。

例:
sizeof(unsigned int) 得 4
sizeof(BB->buf); BB->buf 对象是 char buf[100]; 所以得 100
sizeof(PP); char *PP; PP 是指针,等同 一个 unsigned int 地址,所以得 4。
lanjianjj
2013-07-23 · TA获得超过1411个赞
知道小有建树答主
回答量:70
采纳率:0%
帮助的人:68.2万
展开全部
为什么应该是4啊
你取的是buf的size啊 buf是个char数组 你这样用取的是数组的长度
追问
为什么

char *PP = buf;
sizeof(PP);//结果等于4

结果是4呢???
追答
因为sizeof(PP)获取的是PP所占用的内存空间,PP是个指针,指向buf这个数组的首地址,他占用的内存空间是4
sizeof(BB->buf)取的是BB这个struct里面buf成员所占内存空间 他是一个长度为100的char数组 所占空间是100*1
你可以看下这个文章,是讲数组名和指针的区别的:

http://soft.yesky.com/242/2082242.shtml
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
七周佳琪
2013-07-23
知道答主
回答量:28
采纳率:0%
帮助的人:13.1万
展开全部
指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4。
BB是指针变量,但BB->buf不是。
追问
BB->buf为什么不是呢???
追答
BB->buf是指BB这个struct里面buf成员
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d209629
2013-07-23 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:217
采纳率:100%
帮助的人:122万
展开全部
因为buf后面其实还有一个\0结尾,这也算一个字节,所以是结果是4.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xunmoji01
2013-07-23
知道答主
回答量:5
采纳率:0%
帮助的人:3.1万
展开全部
你这个buf不在同一个语句快中肯定是不一样的结果啊,前面的结果是4应为初始化时候赋值为buf,分来4个字节,后面的buf是直接分给了100个字节的,这个不奇怪吧……用程序测试,相信结果就好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式