# include<iostream># include<string># include<fstream>using namespace std;void f1(){ ofstream out("尝试.dat", ios::binary | ios::out); string str; str = "ABC"; int len = str.size(); cout<<len<<endl; out.write((char *)(& len), sizeof(int)); out.write(str.c_str(), len); // 为什么是len, 而不是len * sizeof(cahr)? out.close();}void f2(){ ifstream in("尝试.dat", ios::binary | ios::in); int length; char * p; in.read((char *)(& length), sizeof(int)); p = new char[length + 1]; in.read(p, length); p[length] = '\0'; cout<<p<<endl; string st; st = p; cout<<st; in.close();}int main(){ f1(); f2(); return 0;}
4 回答
onemoo
TA贡献883条经验 获得超454个赞
sizeof(char) 的值就是 1
str.size() 得到的是字符串中的字符个数
write 的第二个参数就是要写入的字符个数
所以从 size() 得到的 len 本身就表示“len 个 char”,这和 len * sizeof(char) 的意义是一样的。
慕的地0536417
TA贡献3条经验 获得超0个赞
我懂了一点,就是第二操作数可以是字节数也可以是字符数,但是为什么我用字节数时就出错了呢?
是不是要看第一操作数那个指针所指向的是不是字符, 若是字符,就不能用字节数.若不是字符,就不能用字符数?
添加回答
举报
0/150
提交
取消