| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 858 人关注过本帖
标题:sizeof与strlen 研究了一下午也不知道结果,大侠帮帮忙!!!
只看楼主 加入收藏
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
结帖率:66.67%
收藏
已结贴  问题点数:35 回复次数:9 
sizeof与strlen 研究了一下午也不知道结果,大侠帮帮忙!!!
#include<stdio.h>
#include<string.h>
main()
{
    char a[]={1,2,3,4,5,7,8,9};

    printf("%d\n",strlen(a));
}

为什么输出结果是11   不是说strlen是统计字符个数吗?直到遇到'\0'结束统计   按这说法 应该结果是9  为什么不对?  大侠们指点一下,谢谢了!!!
搜索更多相关主题的帖子: sizeof strlen 结果 研究 
2010-11-30 19:43
tomliu05
Rank: 2
等 级:论坛游民
帖 子:17
专家分:28
注 册:2010-11-1
收藏
得分:9 
程序代码:
#include<stdio.h>
#include<string.h>
main()
{
    char a[10]={"123456789"};

    printf("%d\n",strlen(a));
}

那个字符串的输入不同于数组
这个你再试试
2010-11-30 19:52
tomliu05
Rank: 2
等 级:论坛游民
帖 子:17
专家分:28
注 册:2010-11-1
收藏
得分:0 
char a[]={"123456789"};

char a[]这个不用定义大小的,刚才我无意中打上了
2010-11-30 19:56
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:9 
你的这个问题应该是内存越界问题吧,因为你没有在这个字符串后面加上一个字符串的结束标志\0的话,那么strlen这个函数就会自己去找\0 ,这样直到找到这个\0为止,这样就会导致越过了这个char类型数组的边界了!

这个我调式程序的截图:看了这个截图你就会知道了呀!

图片附件: 游客没有浏览图片的权限,请 登录注册


如果你在后面加上一个\0了的话:截图是这样的!
图片附件: 游客没有浏览图片的权限,请 登录注册


这样你的结果就是对的呀!

[ 本帖最后由 我菜119 于 2010-11-30 20:12 编辑 ]

愿用余生致力编程
2010-11-30 20:11
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 4楼 我菜119
恩,加了'\0'的确可以了  呵呵   还有个小问题  char a[7]={"abcdefg"};这是不是不容许?  是不是“”里面的字符个数必须小于7,以便系统存放结束标志?
2010-11-30 20:17
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 2楼 tomliu05
恩,换成字符数组的确可以了  呵呵   还有个小问题  char a[7]={"abcdefg"};这是不是不容许?  是不是“”里面的字符个数必须小于7,以便系统存放结束标志?
2010-11-30 20:43
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 5楼 shenhua2050
这也是不可以的呀!因为系统会为char a[7]分配八个字节的空间,之所以会分配8个字节的空间,主要为了提高cpu的访问效率!(你现在不必关心这一点),但是可以使用的却是7个字节!但是你要明白char a[7] = { "abcdefg"} ;中的"abcdefg"表示的并不是字符串 ,因此当然不会在后面自动加上一个\0 ,可能你会很纳闷为什么"abcdefg"不是一个字符串呢?至于这一点可要好好的去看看书了呀!(注意:这个解释不适用c++中,只是c语言中的一些规则)

愿用余生致力编程
2010-11-30 20:48
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 6楼 shenhua2050
二楼的可以是因为二楼建立的是一个.cpp的文件,如果你建立的是.c的文件的话就不会在这个字符串的后面加上一个\0,这样在调用strlen就会出现问题!

c++的源文件与c的源文件有很大的不同!

愿用余生致力编程
2010-11-30 20:58
rocture
Rank: 1
等 级:新手上路
帖 子:2
专家分:9
注 册:2010-11-30
收藏
得分:9 
我运行得到了9....用TC的
2010-11-30 22:26
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:9 
char a[7]={"abcdefg"} 这个語法确实是有问题。

字符数组初始化語法只有两种形式:
一个是 char a[?] = "xxxxxxxxxx" 这样的,? 那个地方写不写数都行。
另一个是 char a[?] = { x, x, x, ... } 这样的。

至于写成你那样是怎么处理的,楼主不会一下午都没研究出来吧~~


[ 本帖最后由 pangding 于 2010-11-30 22:39 编辑 ]
2010-11-30 22:38
快速回复:sizeof与strlen 研究了一下午也不知道结果,大侠帮帮忙!!!
数据加载中...
 
   



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

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