关于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
为什么会这样???? 展开
sizeof(buf) ;//结果等于100
/************************/
char *PP = buf;
sizeof(PP);//结果等于4
/*************************/
struct B
{
char buf[100];
}Buf;
struct B *BB = &Buf;
sizeof(BB->buf);//结果等于100,而不是4
为什么会这样???? 展开
展开全部
为什么应该是4啊
你取的是buf的size啊 buf是个char数组 你这样用取的是数组的长度
你取的是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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4。
BB是指针变量,但BB->buf不是。
BB是指针变量,但BB->buf不是。
追问
BB->buf为什么不是呢???
追答
BB->buf是指BB这个struct里面buf成员
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为buf后面其实还有一个\0结尾,这也算一个字节,所以是结果是4.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个buf不在同一个语句快中肯定是不一样的结果啊,前面的结果是4应为初始化时候赋值为buf,分来4个字节,后面的buf是直接分给了100个字节的,这个不奇怪吧……用程序测试,相信结果就好
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询