[英]ifstream.read() of a file
所以我做了一个输出文件来做到这一点:
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
您根本无法编写这样的std::string
! 文件的内容可能包含您希望包含的字符(因为std::string
可能会使用小字符串优化),但对于较大的字符串则不会:您正在编写的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()
):
std::string s;
s.resize(read<std::string::size_type>(stream));
read(stream, s.data(), s.size());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.