首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

strlen()疑问?解决思路

2012-05-02 
strlen()疑问?char ch[]{a,b,c,d,e,f}coutsizeof(ch)\tstrlen(ch)endl//6,11(不

strlen()疑问?
char ch[]={'a','b','c','d','e','f'};cout<<sizeof(ch)<<"\t"<<strlen(ch)<<endl;//6,11(不懂)

问题:上面的示例中,为什么strlen(ch)的结果是11啊?望大家帮忙解决,谢谢!
(平台:Visual C++6.0)

[解决办法]
因为ch是一个字符数组,不是一个字符串。字符串要求最后一个位置上保存的是字符'\0',而这个字符数组里没有这个字符。

strlen是通过寻找'\0'的位置来确定字符串长度的,ch里没有,它只好继续往下找。还好没跑多远就找到了,否则你的程序可能会报告越界。
[解决办法]
对于字符串常量,如"abc",有4个字符:'a'、'b'、'c'、'\0',系统会自动加上'\0'。
但你的例子char ch[]={'a','b','c','d','e','f'};是逐字符往数组里赋值的,并不会给你加上'\0'。
strlen是计算以'\0'结尾的字符串的长度,在你的字符数组内存空间后的第6个字符,恰巧是'\0',所以strlen算出了11。
仔细看书吧,都应该讲到的。

探讨

strlen(ch)因该为6
VC6的编译器太垃圾了

[解决办法]
strlen是通过寻找'\0'的位置来确定字符串长度的,char ch[]={'a','b','c','d','e','f'}; 不会自动加上'\0'.我用vc6.0和Microsoft Visual Studio 2010同时测试,6,11 6,19 而且一定范围改变字符串长度strlen()也会显示不同,这个strlen()应该是个错误的调用,只不过在这个简单的程序里不影响运行而已。
[解决办法]
探讨

引用:

因为ch是一个字符数组,不是一个字符串。字符串要求最后一个位置上保存的是字符'\0',而这个字符数组里没有这个字符。

strlen是通过寻找'\0'的位置来确定字符串长度的,ch里没有,它只好继续往下找。还好没跑多远就找到了,否则你的程序可能会报告越界。

为什么每次都是11?

热点排行