簡體   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