对字符串和字符数组的理解
fdsfsd输入sdfsfds
高中的时候,一直没有搞懂字符串与字符数组的关系。现在知道了其中的一点点,于是就写了下来。
字符数组可以用cout出来,而不用一个一个地用下标索引。
1 #include<iostream>
2 #include<conio.h>
3 using namespace std;
4 void main()
5 {
6 char names[6];
7 for(int k=0;k<6;++k) names[k]='\0';
8 for(int i=0;i<5;i++)
9 cin>>names[i];
10 cout<<names<<endl;
11 getch();
12 }
输出数组时,输出的内容会一直读到字符串的0\为止,如果读取的字符串中没有0\ 那么,就会一直读取相邻内存区段的值,知道0\。
在内存中,0\是很常见的。 这也就导致输出字符数组时,如果不注意就会出现乱码。
下面注释第7行,来测试结果。
1 #include<iostream>
2 #include<conio.h>
3 using namespace std;
4 void main()
5 {
6 char names[6];
7 //for(int k=0;k<6;++k) names[k]='\0';
8 for(int i=0;i<5;i++)
9 cin>>names[i];
10 cout<<names<<endl;
11 getch();
12 }
输入
输出
在这里就出现了乱码。
分析原因:
字符数组没有初始化,而数组长度是6,用户输入的数据只能截取6个,但是这6个中没有出现0\
所以 cout显示的结果,一直到names这数组的相邻区域,直到发现了0\
总结:
字符数组 为了防止出现乱码,务必要初始化。