读书人

请教上面这两个strlen()的值如何这么奇

发布时间: 2012-09-29 10:30:01 作者: rapoo

请问下面这两个strlen()的值怎么这么奇怪
代码如下
#include<iostream>

using namespace std;

int main()
{
char a[10];
char b[1];
a[0]='a';
cout<<strlen(a)<<endl;
cout<<strlen(b)<<endl;
}

结果是:
23
32

[解决办法]


C/C++ code
// 函数返回字符串str 的长度( 即'\0'之前的字符数目)size_t strlen( const char * str ){    const char *eos = str; // eos字符串结束指针    while( *eos++ )  ; // eos 移动'\0' (结尾)    return( (int)(eos - str - 1) );}
[解决办法]
其实是越界了。。。
字符数组在声明的时候并有进行初始化,所以他并不是空的,系统会自动给他赋值的,且不止不空,还是满的。这样系统就没办法添加'/0'了。strlen的结果就是错误的。
初始化一下就没问题了:
C/C++ code
#include<iostream>using namespace std;int main(){    char a[10]={0};    char b[1]={0};    a[0]='a';    cout<<strlen(a)<<endl;    cout<<strlen(b)<<endl;    return 0;}
[解决办法]
快成“日经帖” 了

读书人网 >C语言

热点推荐