所以我创建了一个输出文件:
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
答案 0 :(得分:0)
你根本不能写这样的std::string
!文件的内容可能包含您希望包含的字符(因为std::string
可能使用小字符串优化)但是对于更大的字符串,它不会:{{1你正在编写的对象只是实际字符串的“控制记录”。要写一个std::string
,您可能会写两条信息:
std::string
的长度。std::string
。操作看起来像这样:
std::string
(函数write(stream, s.size());
write(stream, s.c_str(), s.size());
适当地实现了整数值和字符序列的序列化;在我看来,只写字节是而不是的方式)
仅仅编写构成write()
对象的字符并没有任何用处。
当将字节读入std::string
对象占用的内存时,会得到未定义的行为:字符串的控制记录部分会被一些不太可能产生有效对象的内容覆盖。假设对象是如上所述,您可以使用以下代码读取它(假设适当的反序列化函数std::string
):
read()