用wirte向文件输出一个对象遇到某个对象成员string过长是否会无法输出
这是一个卡类
class DiningCard
{
private: //私有成员
double Balance; //余额
string CardClass; //卡类别
string CardNum; //卡号
string ConsumPassword; //消费密码
string state; //挂失情况
string NameOfHolder; //持卡人姓名
string SexOfHolder; //性别
string UnitOfHolder; //单位
public:
void setBalance(double ba); //设置余额
double getBalance() const; //获得余额
void setCardClass(string cc); //设置卡类别
string getCardClass() const; //获得卡类别
void setCardNum(string cn); //设置卡号
string getCardNum() const; //获得卡号
void setConsumPassword(string cp); //设置消费密码
string getConsumPassword() const; //获得消费密码
void setNameOfHolder(string noh); //设置持卡人姓名
string getNameOfHolder() const; //获得姓名
void setSexOfHolder(string soh); //设置性别
string getSexOfHolder() const; //获得性别
void setUnitOfHolder(string uoh); //设置单位
string getUnitOfHolder() const; //获得单位
void setState (string state); //设置丢失状态
string getState() const; //获得丢失状态
};
我用ofstream类的write函数向文件输出一个对象
out.open("base",ios_base::app|ios_base::binary);
out.write(reinterpret_cast<char*>(&card),sizeof(DiningCard));
out.close();
当成员UnitOfHolder较短时,打开文件可以看到完整的数据
当成员UnitOfHolder较长时,打开文件发现UnitOfHolder完全没有输出到文件,但其他成员均可以输出到文件
请问应如何修改代码?
[解决办法]
就类似一个链表,能直接把链表本身写进文件吗?
要把链表中的节点一个个写文件,下次读取这些节点的数据,重新生成一个链表。
string对象一样。
能直接memcpy复制的对象,才能直接读写对象本身到二进制文件。