【发布时间】:2021-04-24 12:40:11
【问题描述】:
我正在编写一个程序来将电子邮件地址保存在 .dat 文件中。我将电子邮件声明为“字符串电子邮件;”并使用
将电子邮件保存在 .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();
(这里p11是一个有Email变量的类)
我的问题是,每当我保存一个长字符串时,p11 电子邮件都会正确存储电子邮件,但是当我再次使用文件处理从 .dat 文件中找到电子邮件时,我注意到对于一个长电子邮件地址,它会打印一个很多条作为输出。我还要加一张截图。
【问题讨论】:
-
什么是
p11?(char*)&p11可能是错误的。 -
p11 是一个包含字符串 Email 的类。
-
那你就不能typecast到
char* -
读取功能好像有问题。我不知道,但我注意到如果电子邮件字符串超过 15 个字符,则会出现错误。否则,它工作正常......
-
让我换个说法:你不能这样做
(char*)&p11。p11.Email在内部隐藏了一个指向字符串内存的指针。它适用于长度为 16 '15 char + '\0' 或更少的字符串的实现的原因是因为小字符串优化