流浪的光芒
2021-06-05 10:02
采纳率: 100%
浏览 32

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

在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));
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 你保存文件时要保存数据结构;否则读出来的是字符串,转换不了就会报错。

    评论
    解决 无用
    打赏 举报
  • 有问必答小助手 2021-06-07 16:09

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题