[英]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.