请问下面这两个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;}
[解决办法]
快成“日经帖” 了