yau_song 2021-06-05 10:02 采纳率: 88.9%
浏览 67
已采纳

二进制读取文件访问权限冲突咋

在devc++中运行二进制文件没有报错只是控制台程序空白,

在vs二进制读文件的时候出现了访问权限冲突,但是成功读取了内容,这是咋回事?

//二进制写文件
#include <iostream>
#include <string> 
using namespace std;
#include <fstream>
class Person
{
public:
string m_Name;//性别 
int m_Age; //年龄 
};
void test0()
{
	ofstream ofs;
	ofs.open("Person.txt",ios::out|ios::binary);
	Person p;
	p.m_Name="佳莹";
	p.m_Age=18;
	ofs.write((const char *)&p,sizeof(p));
	ofs.close();
}
int main()
{
	test0();
	return 0;
}
//二进制读文件
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class Person
{
public:
	string m_Name;
	int m_Age;

};
void test0()
{
	ifstream ifs;
	ifs.open("Person.txt", ios::in | ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
		return;
	}
	//	cout<<"test";
	Person p;
	ifs.read((char *)&p, sizeof(p));

	cout << p.m_Name << " " << p.m_Age << endl;
	ifs.close();
}
int main()
{
	test0();
	return 0;
}
  • 写回答

3条回答 默认 最新

  • qfl_sdu 2021-06-05 10:19
    关注

    写文件的时候,要自己把p转成字符串,因为在类中有string这种不定长的类型,编译器不知道怎么转换。所以在写文件前,需要把p的内容存在一个buf[]中,然后把buf[]写入文件,或者一个元素一个元素去写,读取的时候按照写入的方式读出来就是了。

    ofs.write((const char *)&p,sizeof(p));改成:

    char buf[1024]={0};
    sprintf(buf,"%s,%d",p.m_Name.c_str(),p.m_Age);
    ofs.write(buf,strlen(buf));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题