您的位置:首页 > 编程语言 > C语言/C++

C++ 中string类的大小

2014-11-19 22:56 127 查看
string类的大小跟string类的实现有关。与编译器相关,32位机的vc6.0 大小为16. 但在VS2008下它是32.

所以带string成员的类不能够直接写入文件。

如:

struct Test

{

int a;

string b;

string c;

};

int main(void)

{

Test t1;

t1.a = 100;

t1.b = "abcxxxssssddddddddddddddddddddssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss";

t1.c = "yyyeeeeeeeeeeeeeeeeeeeeeeeeedddddddddddddeeeeeeeeeeeeeeeeeeeeeeddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeee";

// 错误的写法,string的长度是固定的,只写入固定长度的字节

//ofstream fout("test6.txt", ios::out | ios::binary);

//fout.write((char*)&t1, sizeof(t1));

//fout.close();

//ifstream fin("test6.txt", ios::in | ios::binary);

//Test t2;

//fin.read((char*)&t2, sizeof(Test));

//cout<<t2.a<<" "<<t2.b<<" "<<t2.c<<endl;

//fin.close();

// 正确的写入方法

ofstream fout("test6.txt", ios::out | ios::binary);

//fout.write((char*)&t1, sizeof(t1));

fout.write((char*)&t1.a, sizeof(int));

int len;

len = t1.b.length();

fout.write((char*)&len, sizeof(int));

fout.write(t1.b.data(), t1.b.length());

len = t1.c.length();

fout.write((char*)&len, sizeof(int));

fout.write(t1.c.data(), t1.c.length());

fout.close();

// 正确的读取方法

ifstream fin("test6.txt", ios::in | ios::binary);

Test t2;

fin.read((char*)&t2.a, sizeof(int));

fin.read((char*)&len, sizeof(int));

// resize 函数为调整容器的大小为len

t2.b.resize(len);

fin.read(&t2.b[0], len);

fin.read((char*)&len, sizeof(int));

t2.c.resize(len);

fin.read(&t2.c[0], len);

cout<<t2.a<<" "<<t2.b<<" "<<t2.c<<endl;

fin.close();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: