回 帖 发 新 帖 刷新版面

主题:输入输出流

#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个回复)

沙发

因为没有把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;
}

板凳

#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 楼

你改错了:
应该是这样
    if(!(is.fail()))
    {
        is.read(s,1);//2 => 1
        //is>>s;
    }

4 楼

我把那行注释掉了,换成is>>s;怎么不行啊

5 楼

那应该是你的字符数组大小不够,改为char s[5];//对应1.txt中的abcd + ‘\0’
应该就没问题了

我来回复

您尚未登录,请登录后再回复。点此登录或注册