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。
仔细看书吧,都应该讲到的。