C++ 文件的ifstream.read()
因此,我制作了一个输出文件,可以执行以下操作:C++ 文件的ifstream.read(),c++,ifstream,ofstream,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* f
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();
}
void readem(char*filename,ifstream&inf){
inf.open(文件名);
字符串a;
如果(inf.is_open()){
inf.read((char*)&a,sizeof(int));
您根本不能这样编写std::string
!文件内容可能包含您希望它包含的字符(因为std::string
可能会使用小字符串优化),但对于较大的字符串则不会:您正在编写的std::string
对象只是“控制记录”要编写std::string
,您可能需要编写两条信息:
要写入的std::string
的长度
std::string
的字符
这些操作看起来像这样:
write(stream, s.size());
write(stream, s.c_str(), s.size());
std::string s;
s.resize(read<std::string::size_type>(stream));
read(stream, s.data(), s.size());
(函数write()
适当地实现了整数值和字符序列的序列化;在我看来,仅仅写字节并不是一个好办法)
仅仅编写组成std::string
对象的字符没有任何用处
当将字节读入由std::string
对象占用的内存时,会出现未定义的行为:字符串的控制记录部分被某些内容覆盖,这些内容不太可能生成有效的对象。假设对象是按上述方式写入的,则可以读取它(假设使用合适的反序列化函数read()
)使用如下代码:
write(stream, s.size());
write(stream, s.c_str(), s.size());
std::string s;
s.resize(read<std::string::size_type>(stream));
read(stream, s.data(), s.size());
std::字符串s;
s、 调整大小(读取(流));
读取(流,s.data(),s.size());
你不能把字符串*
转换成字符*
,你可以只做一个简单的inf>大小(lengthofstr)
是包含字符串长度的变量的大小,而不是字符串的实际长度。非常感谢!这就是我想知道的,我不确定ifstream read和ofstream write