为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
慕侠1129452 2016-10-22 14:18:13
#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>中)

查看完整回答
1 反对 回复 2016-10-22
?
慕九州2325515

TA贡献1条经验 获得超0个赞

不好意思,我不会

查看完整回答
反对 回复 2016-10-22
  • 慕侠1129452
    慕侠1129452
    没事的 ,感谢 !只是系统推荐了你,所以邀请了下,打扰你了
  • onemoo
    onemoo
    原来发问题时系统还会推荐人选啊, 不过看来它的推荐算法很迷啊...
  • 3 回答
  • 0 关注
  • 2334 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信