VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 641|回复: 7

[求助] 为什么会多输出一行

[复制链接]
51_avatar_middle
在线会员 发表于 2016-3-18 09:45:17 | 显示全部楼层 |阅读模式
3驿站币
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Student
{
private:
    char *m_name;
    int m_age;
    int m_score;
public:
    Student(char *name, int age = 0, int score = 0)
    {
        m_name = new char[20];
        m_name = name;
        m_age = age;
        m_score = score;
    }
    ~Student()
    {
    }
    Student(Student &a)
    {
        m_name = new char[20];
        m_name = a.m_name;
        m_age = a.m_age;
        m_score = a.m_score;
    }
    char *GetStuName() const
    {
        return m_name;
    }
    int GetStuAge() const
    {
        return m_age;
    }
    int GetStuSco() const
    {
        return m_score;
    }
};
int main()
{
    int i = 0;
    ofstream ofile;
    ofile.open("student.txt", ios::out);
    if (!ofile.is_open())
    {
        return 0;
    }
    Student a[3] =
    {
        { "a", 18, 87 },
        { "b", 19, 92 },
        { "c", 15, 77 },
    };


    ofstream bofile;
    bofile.open("student.data", ios::binary);

    bofile.write(reinterpret_cast<char *>(&a), 3 * sizeof(Student));
    bofile.close();

    ifstream bifile;
    Student b(" ");
    bifile.open("student.data", ios::binary);
    i = 1;
    while (!bifile.eof())
    {

        bifile.read(((char *)(reinterpret_cast<char *>(&b))), sizeof(Student));
        cout << i << '.' << b.GetStuName() << ' ' << b.GetStuAge() << ' ' << b.GetStuSco() << endl;

        i++;
    }
    while (!bifile.eof());
    bifile.close();


    return 0;
}





上一篇:http协议用post方式发送multipart类型的数据包失败
下一篇:C++工程项目编译时报错
51_avatar_middle
online_admins 发表于 2016-3-18 10:25:37 | 显示全部楼层
哪里多输出一行?楼主具体说下,另外,刚看了几行代码就发现个内存泄露的地方
  1. Student(char *name, int age = 0, int score = 0)
  2. {
  3.     m_name = new char[20];
  4.     m_name = name;
  5.     m_age = age;
  6.     m_score = score;
  7. }
复制代码
51_avatar_middle
ico_lz  楼主| 发表于 2016-3-18 12:16:33 | 显示全部楼层
Syc 发表于 2016-3-18 10:25
哪里多输出一行?楼主具体说下,另外,刚看了几行代码就发现个内存泄露的地方

哪儿,希望能指出!谢谢
QQ截图20160318121304.png
51_avatar_middle
online_admins 发表于 2016-3-18 13:27:47 | 显示全部楼层
tuo 发表于 2016-3-18 12:16
哪儿,希望能指出!谢谢

加个判断就行了:
  1. while (!bifile.eof())
  2. {
  3.         bifile.read(((char *)(reinterpret_cast<char *>(&b))), sizeof(Student));
  4.         if (bifile.gcount() > 0)
  5.         {
  6.                 cout << i << '.' << b.GetStuName() << ' ' << b.GetStuAge() << ' ' << b.GetStuSco() << endl;
  7.                 i++;
  8.         }
  9. }
复制代码


内存泄露代码我都给你贴出来了,就在构造函数里面
51_avatar_middle
ico_lz  楼主| 发表于 2016-3-18 13:54:01 | 显示全部楼层
Syc 发表于 2016-3-18 13:27
加个判断就行了:

为什么会出现这种情况呀,按道理第三条读完了,文件就到末尾了,就会跳出循环呀
51_avatar_middle
online_admins 发表于 2016-3-18 14:01:27 | 显示全部楼层
tuo 发表于 2016-3-18 13:54
为什么会出现这种情况呀,按道理第三条读完了,文件就到末尾了,就会跳出循环呀

可能结尾还有点什么 “别的” 东西 为什么会多输出一行
51_avatar_middle
ico_lz  楼主| 发表于 2016-3-18 14:18:54 | 显示全部楼层
Syc 发表于 2016-3-18 14:01
可能结尾还有点什么 “别的” 东西

就是一直没搞明白文件结尾是怎么判断的
56_avatar_middle
在线会员 发表于 2016-3-20 21:15:25 | 显示全部楼层
debug 啊大哥,一步一步一步,就看到了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-4-19 11:26

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表