对字符串和字符数组的理解

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\


 总结

字符数组  为了防止出现乱码,务必要初始化。

posted @ 2012-01-07 23:46  tiredoy  阅读(310)  评论(0编辑  收藏  举报