C 文件处理打开

C++ file handling opening

本文关键字:处理 文件      更新时间:2023-10-16

while (file.read((char *)&vg, sizeof(vg)))这里'char'的意义是什么? 我不知道为什么在C 中读取" dat"文件的文本时我们使用" char"编程。

我尝试以mcve的方式回答这个问题,假设filestd::istream (包括从中得出的类(。

成员std::istream::read(char_type*, std::streamsize)作为第一个参数a std::istream::char_type* = char*。C风格语法

(char*)(ptr)

ptr铸成char的指针。在这种情况下,将vg的地址重新解释为char数组的地址。此铸件是必要的,以便可以调用read()char在这里使用一个字节:代码从文件读取并写入对象vg字节。

假设filestd::fstream,该功能read期望char*,这意味着"字节的缓冲区",我可以从文件中读取字节的值"。

您没有显示适当的测试柜,但是我们必须假设vg不是字节的缓冲区,而是实际上某些对象(例如,也许是整数(。通过将VgsType*施放到char*,您允许read函数继续,就好像一样,它在构成vg的基础字节上运行。

请注意,有时这在逻辑上是不安全的;这取决于vg是什么。但是,对char*的实际演员阵容是有效的,因为该标准专门允许它作为检查对象的字节表示。

以下语法(char*)这是char*的C样式。因此,它通过执行&vg并将其转换为char*来获取VG的地址。读取功能必须需要类型char*或可以隐式转换为char*的类型。

通常最好使用static_cast。另外,我会尝试从文件中读取而无需作为一般实践(并非所有类型都可以施放到其他类型(,这应该使用标准库流。