亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問tellg()函數給出錯誤的文件大小?

請問tellg()函數給出錯誤的文件大???

C++
繁花不似錦 2019-11-03 04:04:03
我做了一個示例項目,將文件讀入緩沖區。當我使用tellg()函數時,它給我的值大于實際從文件中讀取的read函數的值。我認為有一個錯誤。這是我的代碼:編輯:void read_file (const char* name, int *size , char*& buffer){  ifstream file;  file.open(name,ios::in|ios::binary);  *size = 0;  if (file.is_open())  {    // get length of file    file.seekg(0,std::ios_base::end);    int length = *size = file.tellg();    file.seekg(0,std::ios_base::beg);    // allocate buffer in size of file    buffer = new char[length];    // read    file.read(buffer,length);    cout << file.gcount() << endl;   }   file.close();}主要:void main(){  int size = 0;  char* buffer = NULL;  read_file("File.txt",&size,buffer);  for (int i = 0; i < size; i++)    cout << buffer[i];  cout << endl; }
查看完整描述

3 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

void read_file (int *size, char* name,char* buffer)

*buffer = new char[length];

這些行的確看起來像個錯誤:創建一個char數組并將其保存到buffer [0] char。然后,您讀取要緩沖的文件,該文件仍未初始化。


您需要buffer通過指針傳遞:


void read_file (int *size, char* name,char** buffer)

*buffer = new char[length];

或通過引用(這是c ++的方式,并且不太容易出錯):


void read_file (int *size, char* name,char*& buffer)

buffer = new char[length];

...



查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 632 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號