主题:输入输出流
zhenghui423
[专家分:0] 发布于 2010-04-12 17:23:00
#include<iostream>
#include<fstream>
int main()
{
char*s=new char[1];
ifstream is;
is.open("1.txt");
if(!(is.fail()))
{
is.read(s,2);
//is>>s;
}
is.close();
cout<<s;
delete []s;
return 0;
}
我的1.txt是abcd
可是给s只定义了一个空间,为什么输出能有多个啊!
回复列表 (共5个回复)
沙发
rtygbwwwerr [专家分:910] 发布于 2010-04-12 18:02:00
因为没有把s的最后一位设置为结束符'\0';
这样就可以了:
int main()
{
char*s=new char[2];
ifstream is;
is.open("C:\\1.txt");
if(!(is.fail()))
{
is.read(s,1);
//is>>s;
}
is.close();
s[1] = '\0';
cout<<s;
delete []s;
system("pause");
return 0;
}
板凳
zhenghui423 [专家分:0] 发布于 2010-04-12 18:17:00
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
char s[2];
ifstream is;
is.open("1.txt");
if(!(is.fail()))
{
//is.read(s,2);
is>>s;
}
s[1]='\0';
is.close();
cout<<s;
//delete []s;
return 0;
}
可是我把程序改为这样又会抛出一个异常呢
3 楼
rtygbwwwerr [专家分:910] 发布于 2010-04-12 20:10:00
你改错了:
应该是这样
if(!(is.fail()))
{
is.read(s,1);//2 => 1
//is>>s;
}
4 楼
zhenghui423 [专家分:0] 发布于 2010-04-12 20:16:00
我把那行注释掉了,换成is>>s;怎么不行啊
5 楼
rtygbwwwerr [专家分:910] 发布于 2010-04-12 20:26:00
那应该是你的字符数组大小不够,改为char s[5];//对应1.txt中的abcd + ‘\0’
应该就没问题了
我来回复