| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 455 人关注过本帖, 1 人收藏
标题:谁能解释这问题???
只看楼主 加入收藏
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
结帖率:88.89%
收藏(1)
已结贴  问题点数:20 回复次数:8 
谁能解释这问题???
char *p="basic";
sizeof(p)=4
strlen(p)=5

char p[]="basic";
sizeof(p)=6
strlen(p)=5
为什么sizeof的结果不同?


char p[]={'\0'};
sizeof(p)=1
strlen(p)=0

char p[]={'a','b','c'};
sizeof(p)=3
strlen(p)=7

char p[]={'a','b','c','d','e'};
sizeof(p)=5
strlen(p)=11
strlen是怎么求长度的?
希望知道的能帮忙解释!在此谢过!
2011-03-28 17:49
枝繁叶茂
Rank: 2
等 级:论坛游民
帖 子:14
专家分:32
注 册:2011-3-27
收藏
得分:7 
我也头晕

好想死
2011-03-28 18:54
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:7 
char *p="basic";
sizeof(p)=4
strlen(p)=5
//sizeof返回的是指针类型,也即32位地址,所以是4字节(指针即地址)
//strlen返回的是字符串的长度
char p[]="basic";
sizeof(p)=6
strlen(p)=5
//size返回的是字符数组p所占内存大小,p由"b","a","s","i","c","\0"组成
//同上

strlen求得是字符串的长度, 但不包括"\0"

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-28 19:17
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:7 
char *p="basic";
sizeof(p)=4
strlen(p)=5

char p[]="basic";
sizeof(p)=6
strlen(p)=5
为什么sizeof的结果不同?
sizeof:返回一个对象或者类型所占的内存字节数。
char *p="basic";
sizeof(p)=4 --------这里返回的是指针p所占的内存大小.

char p[]="basic";
sizeof(p)=6   -----------这里是因为数组p,它开辟了一段连续的内存单元。



char p[]={'\0'};
sizeof(p)=1
strlen(p)=0

char p[]={'a','b','c'};
sizeof(p)=3
strlen(p)=7

char p[]={'a','b','c','d','e'};
sizeof(p)=5
strlen(p)=11
strlen是怎么求长度的?
strlen 碰到第1个结束标志\0 返回,所计算的长度值,注意:它并不计算'\0'. 而你这里为什么每次都不一样,想必也很清楚了!
 因为你在定义的 缺省数组当中,并没有给它们设定结束标志不是吗!希望对你有帮助!
2011-03-28 19:59
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
收藏
得分:0 
回复 3楼 ansic
谢谢,那个   指针类型为是什么4个字节?是所有指针类型都是这样,还是?

只有一条路不能选择—那就是放弃的路;只有一条路不能拒绝—那就是成长的路。
2011-03-28 20:04
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
收藏
得分:0 
回复 4楼 默默学习
感谢你的回答!那 系统默认应该会添加结束符吧,那是怎样加的,是随机还是有一定规则?我用的是VC 6.0,还请指点!

只有一条路不能选择—那就是放弃的路;只有一条路不能拒绝—那就是成长的路。
2011-03-28 20:06
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:0 
回复 6楼 Glost
你要注意,那是定义数组的几种形式.
1.   char p[]="abc";
2.   char p[200]="abc";
3.   char p[10]={'a','b','c','\0'};
前两种都不用加结束标志,系统会自动补上,但你要注意的是第二种 单元空间要够大,不然自动补上结束标志有时因为你定的空间不够大而导致错误发生。
你提的问题,恰恰是你用第3种,所以才会出现大小不等的数值发生!
嘿嘿,给分吧!
2011-03-28 20:13
枝繁叶茂
Rank: 2
等 级:论坛游民
帖 子:14
专家分:32
注 册:2011-3-27
收藏
得分:0 
回复 4楼 默默学习
收获

好想死
2011-03-28 20:21
张敏樱木花道
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:137
注 册:2011-3-26
收藏
得分:0 
呵呵,学习到知识了……
2011-03-29 17:55
快速回复:谁能解释这问题???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016376 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved