【发布时间】:2021-10-31 17:30:40
【问题描述】:
代码
#include <iostream>
#include <fstream>
struct emp
{
char name[20];
int age;
};
int main()
{
emp e1={"Abhishek", 22},e2;
std::ofstream fout;
fout.open("vicky.dat", std::ios::out | std::ios::binary);
fout.write(reinterpret_cast<const char*>(&e1),24);
fout.close();
std::ifstream fin;
fin.open("vicky.dat", std::ios::in | std::ios::binary);
fin.read(reinterpret_cast<char*>(&e2),24);
fin.close();
std::cout<<e2.name<<" "<<e2.age<<"\n";
return 0;
}
为什么必须用write和read函数的第一个参数来做reinterpret_cast?
为什么我们在write和read函数中分别将emp类型的地址转换为const char*和char*?
【问题讨论】:
-
因为这是函数所需要的。
-
因为
write/read分别以const char*/char*作为参数,而你告诉编译器“我知道emp*不是char*,但我希望你对待就像char*,我不在乎后果”。 -
@Yksisarvinen 知道了。
-
char在 C++ 中是用词不当。更好的名称是byte:这两个函数(就像所有低级 IO 函数一样)在 字节缓冲区 上运行。 -
@RichardCritten 都不是字节(字节≠八位字节!)。在 C 和 C++ 中,
char= 字节,根据定义。在大小和(别名和寻址)行为方面。
标签: c++ binaryfiles file-handling reinterpret-cast write