提问人:Mark Daniel 提问时间:4/24/2021 最后编辑:acraig5075Mark Daniel 更新时间:4/26/2021 访问量:236
长字符串类型未正确保存
Long string type not saving properly
问:
我正在编写一个程序来将电子邮件地址保存在 .dat 文件中。我在“string Email”中声明了电子邮件,.dat并使用
ofstream my_file;
my_file.open("Email.dat", ios::in | ios::out | ios::app | ios::binary);
while (!my_file.eof())
{
p11.Email = Email;
break;
}
my_file.write((char*)&p11, sizeof(p11));
cout << endl << endl << p11.Email << endl; // just to see if its saving the email properly
my_file.close();
(下面是一个具有 Email 变量的类)p11
我的问题是,每当我保存一个长字符串时,p11电子邮件都会正确存储电子邮件,但是当我再次使用文件处理从 .dat 文件中找到电子邮件时,我注意到对于长电子邮件地址,它会打印很多条形作为输出。我还将添加一个屏幕截图。
答:
1赞
Jeffrey
4/26/2021
#1
你不能做. 在内部隐藏指向字符串内存的指针。(char*)&p11
p11.Email
你应该做这样的事情:
ofstream my_file;
// ... write other parts of p11
// write the email length
int l = p11.Email.length();
my_file.write(&l, sizeof(l));
// write the email content
my_file.write(p11.Email.c_str(), l);
您还需要重写读取,首先读取长度,调整字符串大小,然后读取字符串。
但序列化本身就是一个完整的话题。特别是如果你想像你开始时一样做二进制。围绕结构的填充和打包以及是否要在同一台机器上或另一台机器上读回它,有一些考虑因素。
下一个:需要一些帮助来颠倒单词顺序
评论
p11
(char*)&p11
char*
(char*)&p11
p11.Email