新手问题:关于c++中字符输入和输出问题
1.char a[4];
cin>>a;
cout<<a<<endl;
如果输入的字符数超过4个,程序可以回显出输入的字符,但程序会崩溃
例如输入了5个字符 程序可以正常的回显也不会崩溃 但如果输入了6个以上 可以回显出全部的字符但程序会崩溃。明明我定义了4个但程序怎么能显示全部的字符。请问这个是什么问题?
2.char a[5]={'h','e','l','l','o'};
char b[5]={'g','o','o','d','\0'};
cout<<a<<endl;
cout<<b<<endl;
程序可以正常的显示a和b的字符,但a数组中没有“\0”程序是怎么知道该到哪里结束呢
请各位给小弟解答一下啊
不胜感激啊
问题点数:20、回复次数:3Top
1 楼Cantonese00((⊙_⊙))回复于 2006-02-01 22:50:53 得分 0
1.偶在VC下运行的结果,例如输入了5个字符和6个字符以上 都 可以回显出全部的字符但程序会崩溃一个整数类型数组如下进行定义。
明明我定义了4个但程序怎么能显示全部的字符?//
偶理解到的一种是:如
int a[]={1,2,3,4};
如果简单写成:
a;//数组的标识符名称
这将代表的是数组第一个元素的内存地址,a;就相当于&a[0],它的类型是数组元素类型的指针,在这里它的类型就是int*
char a[4];
cin>>a;
cout<<a<<endl;
输入输出只管取得它的首地址就去干自己本分的事,至于a有没有数组越界是别一个管的。而a为数组元素类型,当然不得越界这个规定使得程序崩溃了(内存管理是个难题哎-_-!!!)
个人理解哎!!! -_-!!! 希望看到更好的结果...
Top
2 楼Cantonese00((⊙_⊙))回复于 2006-02-01 23:03:02 得分 0
2.
char a[]="Hello";
char b[]="good\0";
cout<<a<<endl;
cout<<b<<endl;
这个不是越界问题,可以这样理解:
上面的数组a在内存中的实际存放情况为: Hello\0
上面的数组b在内存中的实际存放情况为: good\0\0
最后一个\0都是由C编译系统自动加上的Top
3 楼fireinsnow(喜欢蓝色)回复于 2006-02-01 23:04:45 得分 0
数组越界确实是个很讨厌很难搞的问题。
====
朋友是一辈子的事……
Top




