【问题标题】:Read Write Files in C++在 C++ 中读写文件
【发布时间】:2014-05-09 18:36:48
【问题描述】:

我有一个动态分配的内存:

//dynamic buffer
char *mybuffer;
cin>>n;
mybuffer=new char[n];
//open file for reading
ifstream inpt(filename.c_str(), ios::binary);
for(unsigned int i=0;i<n;i++){

    //copy every single character into buffer
    inpt.read(mybuffer[i],1);
}

says error, argument of type char is incompatible with type char*

我需要逐字符读取文件并存储在缓冲区中。请注意,这是示例代码。我实际上应该读取多个文件并存储在单个缓冲区中,所以我应该使用带索引的缓冲区。

如何改进此代码?

【问题讨论】:

  • 你甚至不需要for 循环,只需:inpt.read(mybuffer, n)

标签: c++ istream ostream filehandle


【解决方案1】:

您应该传递一个指向 char 的指针作为 ifstream::read 的输入,但您传递的是一个 char。

inpt.read(&mybuffer[i],1);
          ^

【讨论】:

    【解决方案2】:

    错误

    错误,char 类型的参数与 char* 类型不兼容

    是由于istream::read 将指针指向 char:

    istream& read (char* s, streamsize n);
    

    所以你应该写:

    inpt.read( &mybuffer[i], 1);
    

    【讨论】:

      【解决方案3】:

      我建议您避免分配内存并传递给 read。这是打开文件并将每一行读入“std::string”对象并在控制台上打印的示例代码。 "std::string" 将负责所有内存管理,您可以在程序中读取和使用它。

      int main() 
      {
      
      std::string  file =  "input.txt";
      std::string line;
      std::ifstream  text_filestream(file.c_str());
      
      while(std::getline(text_filestream, line)) {
       // now you can use the line object by anyway as per your requirement.
       std::cout<<line<<std::endl;
       }
      }  
      

      我想这个改进应该在你的程序中完成。

      【讨论】:

        猜你喜欢
        • 2012-06-23
        • 1970-01-01
        • 2011-11-23
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-22
        • 2020-04-16
        相关资源
        最近更新 更多