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

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

2012-09-29 
请问下面这两个strlen()的值怎么这么奇怪代码如下#includeiostreamusing namespace stdint main(){char

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

热点排行