c/c++中如何采用二进制文件存储数据?

 我来答
du瓶邪
推荐于2016-05-11 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2930万
展开全部
应该这样保存:
int main()
{
string str1;
string str2;
cin >> str1;
cin >> str2;
ofstream outfile("temp.dat",ios::binary);
if(! outfile)
{
cerr << "Error ! " <<endl;
return 0;
}
outfile.write(str1.c_str(),str1.size()+1);
/*你原来写成(char * )&str1,这样往文件里写入的东西其实是str1这个类的数据(包括了指向实际字符串的指针),而不是字符串。因为string类的字符串是用new在堆上分配的,string类本身只包含字符串的指针,用c_str()这个成员函数可以获得这个指针,你可以看一下string类的源码。
改成这样以后,写入文件里的就是实际的字符串了。
写入的长度应该是字符串的长度(包括结束符'\0')*/
outfile.write(str2.c_str(),str2.size()+1);
outfile.close();
return 1;
}
读取的时候这样读取:
int main()
{
string str1;
str1.reserve(100);/*为str1申请100个字符的空间,如果不申请的话c_str()返回的是空指针,也就是没有空间。假设你上次存的两个字符串长度不超过100。*/
ifstream infile("temp.dat",ios::binary);
if (! infile)
{
cerr << "Error ! " <<endl;
return 0;
}
infile.read((char * )str1.c_str(),100);/*这儿由于不知道你上次写入文件的两个字符串的长度,只能把文件里的内容都读出来再根据'\0'来分析出两个字符串。*/
cout <<str1 <<endl; //输出第一个字符串
cout << (char*)(str1.c_str() + strlen(str1.c_str())+1) << endl;//输出第二个字符串
return 1;
}
匿名用户
2013-05-16
展开全部
保存一个整数int a=12345;到文件
可以是文本方式,可以是二进制方式。
文本方式就是保存的文件内容是一个字符串12345,记事本可以直接打开,显示12345
fprintf(fp, "%d", a);
二进制方式就是把直接把12345这个数在内存的内容(0x00003039)直接放在文件中,你用记事本打开是乱码,一般用16进制编辑器打开
fwrite(&a, sizeof(a), 1, fp);
一般都是直接把一个结构保存到文件
比如
struct stu
{
char name
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式