如此初始化数组为什么会失败?

来源:百度知道 编辑:UC知道 时间:2024/06/11 16:45:43
#include<iostream>
//#include<string>
using namespace std;
int main()
{
char a[]="I am happy";
char b[]={'I',' ','a','m',' ','h','a','p','p','y'};
int c,d;
c=strlen(a);
d=strlen(b);
cout<<c<<'\n'<<d<<endl;
cout<<a<<endl;
cout<<b<<endl;
return 0;
}

问: 1.运行后发现b的长度为22,为什么?
2.输出b的结果是“I am happy烫I am happy”,为什么?
3.函数"strlen()"是包含在头文件"string"里的,可我把头文件"string"去掉后函数依然可用,为什么?

1和2
字符数组b里面没有字符串结束符号‘\0’
所以,它的长度也就不可预期了,输出结果是什么,前面是 i am happy,后面的同样不可预期。

3
这是你用的编译环境的问题,有些编译环境会默认包含一些头文件的

1.编译器把b认为成问题2里面的“I am happy烫I am happy”,这个长度就是22。
2.b的数组里没有'\n'的字符串结束符
3.<string>不是包含strlen的,它是C++标准库类 string的头。VC环境下 strlen可以不需要加头文件。

b最后加'\0'做为字符串的结束符号...