C++ 在c+中读取文件时+;,它如何自动将字符放入字符数组,将数字放入整数变量? #包括 #包括 #包括 #包括 使用名称空间std; akh类{ 公众: 字符名[20]; 智力年龄; }; int main(){ akh ak; 库特 这是怎么发生的
您正在按原样将类C++ 在c+中读取文件时+;,它如何自动将字符放入字符数组,将数字放入整数变量? #包括 #包括 #包括 #包括 使用名称空间std; akh类{ 公众: 字符名[20]; 智力年龄; }; int main(){ akh ak; 库特 这是怎么发生的,c++,file-handling,C++,File Handling,您正在按原样将类akh的完整内存布局写入二进制文件。 因此,如果您以相同的方式读回它,并且使用相同的字节数,那么ak实例中将具有相同的内存布局 关闭文件后,tellg指针会自动移动到文件的开头 不,在调用close()后,不再维护tellg指针 对于输入,您正在打开一个新的fstream实例fin,它从文件的开头开始读取 除了((char*)&x,sizeof(x)),还有其他方法可以在二进制文件中读写吗 对于前面提到的二进制文件号,您希望写入和读取它们在内存中的确切字节数 如果要在文本文件中包
akh
的完整内存布局写入二进制文件。因此,如果您以相同的方式读回它,并且使用相同的字节数,那么
ak
实例中将具有相同的内存布局
close()
后,不再维护tellg
指针
对于输入,您正在打开一个新的fstream
实例fin
,它从文件的开头开始读取
进行输入
当我运行您的代码时,您遇到的问题就清楚了。您正在使用的
std::getline()
变量从输入到ak.name
的代码中正好包含20个字符:
#include <fstream>
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
class akh {
public:
char name[20];
int age;
};
int main() {
akh ak;
cout << "Size of ak:" << sizeof(ak) << endl;
fstream fout("abc.dat", ios::binary | ios::out);
cout << "\nEnter your name: ";
cin.getline(ak.name, 20);
cout << "\nEnter your age: ";
cin >> ak.age;
fout.write((char*) &ak, sizeof(ak));
fout.close();
fstream fin("abc.dat", ios::in | ios::binary);
fin.read((char*)&ak, sizeof(ak)); // automatically puts name in ak.name and age in ak.age ? How is this happening?
cout << "\nName: " << ak.name;
cout << "\nAge: " << ak.age;
fin.close();
return 0;
}
您可以通过将上面的行替换为
cin.getline(ak.name, 20);
输入时在姓名和年龄之间留出一个空格
这是一个解决方案,其中所有内容都按预期工作,并显示二进制文件的内存布局
cin >> ak.name;