我正在尝试从文件中读取字符串,但不知道它为什么会收拾垃圾邮件。这是我的代码:
class book
{
char *bname;
public:
void addBook()
{
char newName[30];
cout << "Enter the new bookname: ";
cin.getline(newName,30);
ofstream add("book.txt",ios::binary | ios::app);
if(add.write((char*)this,sizeof(this)))
cout << "Entry Succesful";
else
cout << "Entry failed";
}
void showBook()
{
ifstream getBook("book.txt",ios::binary);
getBook.seekg(0);
while(getBook.read((char*)this,sizeof(this)))
{
cout << bname;
}
}
};
void main()
{
book b;
b.addBook();
b.showBook();
getch();
}
以下是截图:
答案 0 :(得分:0)
你不应该(char*)this
。这是非常危险的,可能是未定义的行为,它肯定不会做你期望的。 this
指针指向整个对象,而不仅仅指向一个字段。
如果您尝试将数据序列化为二进制格式,那么这不是解决问题的方法。就目前而言,您正在编写和读取指针位置。这不起作用,因为每次程序运行时指针都可以(并且确实)指向不同的位置。就序列化而言,指针位置本身并不包含任何实际有用的信息。
我建议您此时不要尝试序列化数据。首先尝试读/写明文。
不是直接阅读/撰写this
,而是直接使用bname
。此外,您需要初始化bname
,否则它将指向垃圾数据。另请注意,如果您尝试将bname
指针直接复制到文件中,它将无法工作。您将需要循环遍历bname
数据,直到您到达结束时进行编写并同样进行阅读。
您还应该考虑使用std::string
而不是直接操作char*
和char
数组。这大大简化了事情,避免了手动内存管理的需要。