#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
class person{
public: person(string n = "noname", string num = "123"):name(n),number(num) {}
void showPerson();
public:
string name;
string number;
};
vector<person*> dataRead(vector<person*> & data)
{
FILE* fp = NULL;
fp = fopen("data.txt","rb");
person* temp;
if(fp == NULL)
{
cout << "error\n";
}
int i = 0;
while(fread(&data[i],sizeof(person),1,fp))
{
temp = new person;
data.push_back(temp);
}
fclose(fp);
return data;
}
void dataWrite(vector<person*> & data)
{
FILE* fp = NULL;
fp = fopen("data.txt","wb");
if(fp == NULL)
{
cout << "error\n";
}
int n = data.size();
int i = 0;
while(i < n)
{
fwrite(&data[i],sizeof(person),1,fp);
i ++;
}
fclose(fp);
}
int main()
{
vector<person*> data;
data = dataRead(data);
string name;
string number;
while(1)
{
cout << "Input Name\n";
cin >> name;
if(name == "#")
break;
cout << "Input number\n";
cin >> number;
data.push_back(new person(name,number));
}
int i = 0;
for(i = 0; i < data.size(); i++)
{
data[i]->showPerson();
}
dataWrite(data);
for(i = 0; i<data.size(); i++)
{
delete data[i];
}
}用的是c语言的文件读取,C++的文件读取不会,读入vector的时候老段错误,麻烦给看下,vector里存入的是person*类型的,我类型跟指针方面有些不理解,并且vector不是很熟练,麻烦大神帮忙看下,顺便指出哪里的问题,感谢!
3 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
vector中的储存的元素保证在内存中是相邻的,但不一定和vector对象本身存在一起。string也是如此。
C函数库中的fwrite函数会将第一个参数所指的一块内存中的内容存入文件。所以你不能用它来写入string,因为string中的字符在内存中是不一定和string对象保存在一起的。
如果你是在学C++,那就用C++的方式来写代码,不要总想着C,它们是两种不同语言!要学会用C++的方式来解决问题。 实际上C++标准库中的vector远比C中传统的数组好用。
在C++中向文件中写入应该使用 ofstream对象(在<fstream>中)
- 3 回答
- 0 关注
- 2334 浏览
添加回答
举报
0/150
提交
取消