ifstream.read()文件

时间:2014-11-07 02:26:44

标签: c++ ifstream ofstream

所以我创建了一个输出文件:

   ofstream outf;
   outf.open(filename);
   string str = "This is test!";
   int lengthofstr = str.length();
   outf.write((char*)&str, sizeof(lengthofstr));
   outf.close();

之后完全用另一个程序(exe)我在文件中读到:

    void readem(char* filename, ifstream &inf){

    inf.open(filename);

        string a;

        if (inf.is_open()){
            inf.read((char*)&a, sizeof(int));
            cout << a << endl;

        }
        else
            cout << "file is not opening!" << endl;

        inf.close();
    }

一旦我尝试运行它,c ++ exe就会中断。我试图返回字符串。如果有人可以指点我的教程/帖子/问题/或向我解释ifstream如何阅读,请提前谢谢XD

1 个答案:

答案 0 :(得分:0)

你根本不能写这样的std::string!文件的内容可能包含您希望包含的字符(因为std::string可能使用小字符串优化)但是对于更大的字符串,它不会:{{1你正在编写的对象只是实际字符串的“控制记录”。要写一个std::string,您可能会写两条信息:

  1. 要写的std::string的长度。
  2. std::string
  3. 的字符

    操作看起来像这样:

    std::string

    (函数write(stream, s.size()); write(stream, s.c_str(), s.size()); 适当地实现了整数值和字符序列的序列化;在我看来,只写字节是而不是的方式)

    仅仅编写构成write()对象的字符并没有任何用处。

    当将字节读入std::string对象占用的内存时,会得到未定义的行为:字符串的控制记录部分会被一些不太可能产生有效对象的内容覆盖。假设对象是如上所述,您可以使用以下代码读取它(假设适当的反序列化函数std::string):

    read()