在C++中如何将含有string类型成员的对象存储到文件中去

在C++中要将一个对象存储到文件中去,可是这个对象(类)中包含有string类型的成员,如果直接存储读取的时候运行会不正常,该怎么破

string内存是动态申请的内存,所以要存内容,就需要将string的内容全部存进去,然后读的时候才能不出错。
或者你就讲string的内容全部转成字符数组,然后将字符数组的整个内存块写到文件中。追问

将string的内容全部存进去?这个是说需要将各成员的数据单独存储而不是直接存储一个对象吗?
还有一个问题就是用字符数组时构造函数初始化列表怎么写?
class Person{
char name[40]; //string name;

public:
Person(){}

};

追答

带指针成员的对象,你如果直接存一个对象,只是吧指针的值存起来了,而不是指针指向的内容,而这个值在你下次读取时候没有一点用处。因为内存地址什么的都变了,所以必须手动的吧内容存到文件中。
初始化列表你要写什么?我没明白,不需要写呀。
只是用字符数组没有string 方便,你没法直接赋值 name=“hello”;这样是不行的,你不许用到一些库函数 strngcpy(name,"hello")类似于这样的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-01
你是北邮的吧追问

??不是啊,跟这个问题有关系?

追答

没有,只是问这些问题的很多都是北邮,你的问题,可以不把整个类存进去·,把类的数据分别存入文件,再分别读出,好吧,比较麻烦,但是可以凑合着用

怎么把C++程序的输出结果存储到一个TXT文件中?
write.open("text.txt); \/\/表示你要把内容输出到“text.txt"这个文件里 如果没有这个文件,会自动创建这个文件 write << "abc"; \/\/这里是你想要输出的内容,这里是输出了一个string abc write.close(); \/\/ 输出完毕后关闭这个文件 在C++中,类是支持数据封装的工具,对象则是数据封装的实现。

c++如何用文件流将数据存储到一个TxT文件中
4、在代码头部包含入我们需要的头文件,这里因为是C++所以需要包含输入输出流iostream、文件流fstream以及默认的命名空间std;5、在主函数首先用ofstream从内存到硬盘的流操作创建一个out对象,然后在参数中传入待输出文件的文件名,然后使用out输出带输出的字符序列;6、然后为了检查我们的输入结果是正确的,...

第14篇:C++的string-两手抓的内存分配
在C++中,string对象实质上是一个容器,内部有一个c_str方法,它返回指向字符串副本的内存地址,配合printf函数可以获取字符串副本。本文将通过实例分析string对象在栈和堆中的内存分配策略。栈中的内存分配 让我们通过一个示例来观察。在程序中,我们重载了operator new和operator delete,以显式展示string...

c++如何将数组以文本输出
代码如下:include<iostream> include<fstream> include<string> include<cstdio> include<cstdlib> using namespace std;int main(){ fstream fs("test.txt");istreambuf_iterator<char> beg(fs),end;string data(beg,end);FILE * f;f= fopen("1.txt", "w");for(int i=0; data[i]; i...

从文件中读取存入vector的问题
在C++中没有非常方便的序列化方式,一般都需要你自己手工来控制对象的存储或构建过程。像你这个问题,你只能自己在这个类中写存储过程代码了,比如使用文本文件,第一行写入vector的大小,后面每行写入一个string。然后反序列化的时候先读取第一个数字,然后读取后面这么多个string,最后再构建vector,最终...

C++ string内存的分配 C++如何给string分配内存的
首先你要弄清楚sizeof是用来求类型的字节数的。因为你定义的string *s是string的对象指针,那么sizeof(*s) 和 sizeof(s) 都是求指针类型的字节数,学过数据结构的你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在...

请问C++如何保存一个类对象
简单说类不占内存.类的对象才占.类里的成员函数是代码,要占内存;类的静态成员每类一份类似全程变量,要占内存;类的虚拟表是对象内存的一部分.你是想知道整个程序里代码和全程怎么放?那是链接程序管的.--- sizeof(A)告诉你的是对象的大小,可以用A代替对象变量只是一种方便的书写方式.类比sizeof(i...

用托管c++怎么将结构体或对象中的成员拷贝到数组
原因很简单:s[1].name[50]="王佳芝";左边使用结构体的对象的成员,右边是字符串,要是那是存储在静态存储区的,这样赋值不符合语法:应该使用strcpy()函数即可:修改如下:include<stdio.h> include<string.h> define ST struct std ST { int num;char name[7];char sex;};void main(){ ST...

C++中的成员变量和成员函数在内存中是怎么存储的?与结构体中变量和函数...
int fun1(); \/\/不占用对象的空间 float fun2();\/\/不占用对象的空间 static int fun3();\/\/不占用对象的空间 };MyClass类的实例中:占用2*4=8个字节 (即a b这两个成员)涉及虚函数表那些你在另外研究。c++中struct和class在计算对象大小时你就不用区别了,计算方法一样。

C++类内包含vector成员变量,vector中的元素存储在堆区还是栈区?_百度...
new T就是在堆区创建一个类T的对象,因为v是类T的数据成员,v自然是存放在堆区。delete p时v会自动释放。

相似回答