很简单,答对就给分了!

solaFighting 2007-10-28 09:16:46
// 14.11.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "person.h"
using namespace std;
void write(ofstream& out,person per);
void read (ifstream& in,person per);
int main()
{
person a=
{
"aa","bb","1"
};
ofstream out("persons.txt",ios::out|ios::binary);

write(out,a);
out.close();
person b={"d","d","2" };
ifstream in("persons.txt",ios::in|ios::binary);

read(in,b);
cout<<b.firstName<<b.lastName;
return 0;
}
void write(ofstream& out,person per)
{
out.write(reinterpret_cast<char*>(&per),sizeof(per));
}
void read (ifstream& in,person per)
{
in.read(reinterpret_cast<char*>(&per),sizeof(per));
}

我是想把一个类用二进制的 形式写到文件里,然后再读出来。
可是运行之后,我发现我的类不是用二进制的形式写进去的,而是那种未格式化的写进去了。。
而且我也读不出来。
是怎么回事呢?
我应该怎么写哟?
...全文
82 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2007-10-28
  • 打赏
  • 举报
回复
呵呵

可以加我的交流群 : 6541168

:)
solaFighting 2007-10-28
  • 打赏
  • 举报
回复
晕,算了。
我只是想认识下高手。好像成了流氓一样。
ilovevvv 2007-10-28
  • 打赏
  • 举报
回复
我是进来看星星被调戏的..
星羽 2007-10-28
  • 打赏
  • 举报
回复
不给q就不给你分。

--------------


- -b - -b - -b

solaFighting 2007-10-28
  • 打赏
  • 举报
回复
不给q就不给你分。
solaFighting 2007-10-28
  • 打赏
  • 举报
回复

你太伟大了!要下你qq行不?
真想认识你这样的人!
星羽 2007-10-28
  • 打赏
  • 举报
回复
上面给你改了

你的错误有2

1)

你没给出你的 person 的定义,但我猜想里面应该

有类似

char* firstName; 的成员

这是个指针

当你写如文件的时候, 写进去的是这个指针的值,一个32位的数,而不是字符

所以要改成 char firstName[128]的数组


2)

你的 wirte 和 read 函数传入的person 是值,应该改成

引用 person&
星羽 2007-10-28
  • 打赏
  • 举报
回复


#include "stdafx.h"
#include <iostream>
#include <fstream>

using namespace std;

struct person {

char firstName[128];
char lastName[128];
char number[8];

person(const char s1[], const char s2[], const char s3[])
{
strncpy(firstName, s1, sizeof(firstName));
strncpy(lastName, s2, sizeof(lastName));
strncpy(number, s3, sizeof(number));
}

};

void write(ofstream& out, person& per);
void read (ifstream& in, person& per);

int main()
{
person a("aa", "bb", "1");
ofstream out("persons.txt",ios::out | ios::binary);

write(out,a);
out.close();

person b("d", "d", "2");
ifstream in("persons.txt",ios::in | ios::binary);

read(in,b);
cout <<b.firstName <<b.lastName;
return 0;
}

void write(ofstream& out, person& per)
{
out.write(reinterpret_cast <char*>(&per),sizeof(per));
}

void read (ifstream& in, person& per)
{
in.read(reinterpret_cast <char*>(&per), sizeof(per));
}
solaFighting 2007-10-28
  • 打赏
  • 举报
回复
怎么没给出解决方法呢?
而且你说的我没太听懂。。。
100分哪!
星羽 2007-10-28
  • 打赏
  • 举报
回复
因为你的 person 结构里函授 指针(字符串指针)成员,

所以你写入的是指针,并不是真正的数据

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧