猿问

C++ 中vector 用C语言进行文件读取

#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不是很熟练,麻烦大神帮忙看下,顺便指出哪里的问题,感谢!


慕侠1129452
浏览 2335回答 3
3回答

onemoo

vector中的储存的元素保证在内存中是相邻的,但不一定和vector对象本身存在一起。string也是如此。C函数库中的fwrite函数会将第一个参数所指的一块内存中的内容存入文件。所以你不能用它来写入string,因为string中的字符在内存中是不一定和string对象保存在一起的。如果你是在学C++,那就用C++的方式来写代码,不要总想着C,它们是两种不同语言!要学会用C++的方式来解决问题。 实际上C++标准库中的vector远比C中传统的数组好用。在C++中向文件中写入应该使用 ofstream对象(在<fstream>中)

慕九州2325515

不好意思,我不会
随时随地看视频慕课网APP
我要回答