cin.getline(a,5,'/n')输出为什么是4个不是5个
#include<iostream.h>using namespace std;
int main()
{
char a[3];
cin.getline(a,5,'\n');
cout<<a<<endl;
system("pause");
return 0;
}
a[0] a[1] a[2] a[3] #include<iostream> [color=SeaGreen]//注意没有“.h”[/color]
using namespace std;
int main()
{
char a[3];
cin.getline(a,5,'\n');
cout<<a<<endl;
system("pause");
return 0;
}
[bo]说明:[/bo]
char a[3];
上面这句是创建了一个字符数组,它可以存放三个字符。这三个字符的存放地址如下:
a[0]、a[1]、a[2]
值得注意的是,[color=Red]c++的编译器不会检查数组的下标是否有效[/color]……
所以就算你使用了a[10000],在编译时也查不出来问题……
不过在运行时,这有可能会破坏数据或代码,也有可能不会破坏……
有可能导致程序异常终止,也有可能不会……
所以后面的:
[color=Red]cin.getline(a,5,'\n');
这一句是有风险的[/color]
它把输入的5个字符(这5个字符中最后一个字符是'\0',所以就是一个字符串)
分别放在了a[0]、a[1]、a[2]、a[3]、a[4]中……
其中a[3]和a[4]是越界的……
总之,最好不要冒这个风险……
不要越界使用数组……
getline的三个参数分别是:
1)字符串的存放地址
2)字符串长度
3)分界符
楼主问到为什么最后显示出来了4个字符,而不是5个?
这是因为这个是字符串,而不是字符数组……
字符串是要以'\0'作为结束符的……
所以显示出来的字符是4个而不是5个……
所以以上程序最好写成这样:
#include<iostream>
using namespace std;
int main()
{
char a[[color=Red][bo]5[/bo][/color]];
cin.getline(a,5,'\n');
cout<<a<<endl;
system("pause");
return 0;
} 楼上的回答有道理!
楼主应该看看cin.getline();各个参数的作用!
原来如此
首先我没注意到a[];其次原因是cin.getline()自动把结果作字符串 处理了。
晓得了,谢了
页:
[1]
