[英]How does read and write function work in C++ file handling?
我正在仅从 Internet 学习 C++ 中的文件处理。 我遇到了读写功能。 但是他们采用的参数让我感到困惑。 所以,我发现语法为
fstream fout;
fout.write( (char *) &obj, sizeof(obj) );
和
fstream fin;
fin.read( (char *) &obj, sizeof(obj) );
在这两个中,char*的作用是什么? 它是如何读写文件的?
函数fstream::read
具有以下函数签名:
istream& read (char* s, streamsize n);
您需要将参数转换为正确的类型。 (char*)
告诉编译器假装&obj
是正确的类型。 通常,这是一个非常糟糕的主意。
相反,你应该这样做:
// C++ program to demonstrate getline() function
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
fstream fin;
getline(fin, str); // use cin instead to read from stdin
return 0;
}
char *
cast 与read
和write
的用法是将obj
变量视为通用的、连续的、字符(忽略任何结构)。
read
函数将从流中直接读取到obj
变量中,无需任何字节转换或映射到数据成员(字段)。 请注意,类或结构中的指针将替换为来自流的任何值(这意味着指针可能指向无效或不正确的位置)。 注意填充问题。
write
函数会将obj
占用的整个内存区域write
流。 结构或类成员之间的任何填充也将被写入。 指针的值将写入流,而不是指针指向的项目。
注意:这些函数“按原样”工作。 没有数据的转换或翻译。 例如,Big Endain 和 Little Endian 之间没有转换; 不处理“行尾”或“文件尾”字符。 基本上是镜像数据传输。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.