c++二进制流对象中的string

用二进制流文件保存C++对象,关于c++对象中的string成员的保存问题

用代码块功能插入代码,请勿粘贴截图
写:
//string cls_name:
int len1 = clas.getcls_name().size();
ofs.write((char*)(&len1), sizeof(len1));
ofs.write(clas.getcls_name().c_str(), len1 + 1);
读:
//string clas_name
int m;
ifs.read((char*)(&m), sizeof(int));
string name2;
name2.reserve(m);
ifs.read((char*)name2.c_str(), m);

报错内容 :
0x76C0E062 处有未经处理的异常: Microsoft C++ 异常: std::length_error,位于内存位置 0x006FEB70 处。

请问各位朋友,这个问题怎么解决啊?

ofs.write((char*)(&len1), sizeof(len1));
这里就不对
ofs.write(len1, sizeof(len1));
这样才对
你要写入的是字符串长度,不要写入它的地址
后面既然你写入的是len1+1,读的时候也应该读m+1,读m不少读一个char吗