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

# 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;

}

https://img.mukewang.com/5b1e376c0001e83801960125.jpg

慕的地0536417
浏览 3348回答 4
4回答

onemoo

sizeof(char) 的值就是 1str.size() 得到的是字符串中的字符个数write 的第二个参数就是要写入的字符个数所以从 size() 得到的 len 本身就表示“len 个 char”,这和 len * sizeof(char) 的意义是一样的。 

慕的地0536417

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

慕的地0536417

我懂了一点,就是第二操作数可以是字节数也可以是字符数,但是为什么我用字节数时就出错了呢?是不是要看第一操作数那个指针所指向的是不是字符, 若是字符,就不能用字节数.若不是字符,就不能用字符数?
打开App,查看更多内容
随时随地看视频慕课网APP