繁体   English   中英

C++ 文件处理中的读写函数是如何工作的?

[英]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; 
} 

来源: https : //www.geeksforgeeks.org/getline-string-c/

char * cast 与readwrite的用法是将obj变量视为通用的、连续的、字符(忽略任何结构)。

read函数将从流中直接读取到obj变量中,无需任何字节转换或映射到数据成员(字段)。 请注意,类或结构中的指针将替换为来自流的任何值(这意味着指针可能指向无效或不正确的位置)。 注意填充问题。

write函数会将obj占用的整个内存区域write流。 结构或类成员之间的任何填充也将被写入。 指针的值将写入流,而不是指针指向的项目。

注意:这些函数“按原样”工作。 没有数据的转换或翻译。 例如,Big Endain 和 Little Endian 之间没有转换; 不处理“行尾”或“文件尾”字符。 基本上是镜像数据传输。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM