为了账号安全,请及时绑定邮箱和手机立即绑定

关于c++write()和read()函数的问题?

关于c++write()和read()函数的问题?

慕的地0536417 2018-06-11 16:50:15
# 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) 的意义是一样的。 

查看完整回答
反对 回复 2018-06-13
?
慕的地0536417

TA贡献3条经验 获得超0个赞

刚试了下,字符字节都可以了,好奇怪.

查看完整回答
反对 回复 2018-06-11
?
慕的地0536417

TA贡献3条经验 获得超0个赞

我懂了一点,就是第二操作数可以是字节数也可以是字符数,但是为什么我用字节数时就出错了呢?

是不是要看第一操作数那个指针所指向的是不是字符, 若是字符,就不能用字节数.若不是字符,就不能用字符数?


查看完整回答
反对 回复 2018-06-11
  • 4 回答
  • 0 关注
  • 3336 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信