Pink_Piggy 2021-08-10 10:08 采纳率: 100%
浏览 71
已结题

用ifstream读取文件中的内容然后保存到了字符串buff中,但是打印buff之后后面出现了别的东西,不知道为啥子

        string filename;
        cout << "请输入文件名字:";
        cin >> filename;
        ifstream t;
        
        int size;
        t.open(filename);
        t.seekg(0, ios::end);
        size = t.tellg();
        t.seekg(0, ios::beg);
        char* buffer = new char[size+1];
        t.read(buffer, size);
        t.close();

        string buff = buffer;
        
        cout << "....." << endl;
        cout << buff << endl;
        cout << "....." << endl;

下面是运行的结果,为啥子后面会多了乱七八糟的东西

img

下面是文件information.txt中的内容

img

  • 写回答

5条回答 默认 最新

  • codeaftercode 2021-08-10 10:15
    关注

    我猜文件最后一行没有回车换行符。cout<<buff的时候是要一直输出到发现\0的,所以应在string buff = buffer;之前,将buffer最后一个字节变成\0:

            string filename;
            cout << "请输入文件名字:";
            cin >> filename;
            ifstream t;
            int size;
            t.open(filename);
            t.seekg(0, ios::end);
            size = t.tellg();
            t.seekg(0, ios::beg);
            char* buffer = new char[size+1];
            t.read(buffer, size);
            t.close();
    
            buffer[size]='\0';
            string buff = buffer;
            cout << "....." << endl;
            cout << buff << endl;
            cout << "....." << endl;
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 已采纳回答 8月10日
  • 创建了问题 8月10日