我有代码,它将这种结构的向量写入二进制文件:
struct reader{
char name[50];
int card_num;
char title[100];
}
一切都运行得很好但是当我,例如,写入文件结构{One,1,One}并打开存储它的.txt文件时,我看到了:
一ММММММММММММММММММММММММММММММММММММММММММММММММ一个ММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММ
所以我被问到为什么要显示它,它取决于什么,但我不能给出一个很好的答案
编辑: 添加了我用来写入文件的代码
void Write_to_File(vector<reader>& vec){
cin.clear(); // clearing
fflush(stdin);// input stream
const char* pointer = reinterpret_cast<const char*>(&vec[0]);
size_t bytes = vec.size() * sizeof(vec[0]);
fstream f("D:\\temp.txt", ios::out);
f.close();
ofstream file("D:\\temp.txt", ios::in | ios::binary);
file.write(pointer, bytes);
file.close();
remove("D:\\lab.txt");
rename("D:\\temp.txt", "D:\\lab.txt");
cout << "\n*** Successfully written data ***\n\n";
}
P.S。当我从文件中读取一切正常时
答案 0 :(得分:0)
你在一个文件中写了154个八位字节,只有一个和一个是char,所以你的文本编辑器尝试读取char但大部分都是垃圾。你写二进制文件,你不应该期望有可读的东西。
答案 1 :(得分:0)
为什么二进制文件中的某些数据显示为原样,而其他数据以奇怪的方式显示
您似乎正在尝试读取二进制数据,就好像它包含字符编码数据一样。其中一些 - 但不是全部。也许这就是为什么你认为这看起来很奇怪。除此之外,输出似乎非常合理。
为什么会这样显示
因为这是对象在读者使用的字符编码中包含的数据的文本表示。
它取决于什么
这取决于您初始化内存的值。例如,第一个字符显示为O
,因为您已使用值name[0]
初始化'O'
。一些数据是成员之间的填充,无法直接初始化。这些字节的值取决于未指定的内容。